É¢ÁÐ±í£¨Hash table£¬Ò²½Ð¹þÏ£±í£©£¬ÊǸù¾Ý¹Ø¼üÂëÖµ(Key value)¶øÖ±½Ó½øÐзÃÎʵÄÊý¾Ý½á¹¹¡£Ò²¾ÍÊÇ˵£¬Ëüͨ¹ý°Ñ¹Ø¼üÂëÖµÓ³Éäµ½±íÖÐÒ»¸öλÖÃÀ´·ÃÎʼǼ£¬ÒÔ¼Ó¿ì²éÕÒµÄËÙ¶È¡£Õâ¸öÓ³É亯Êý½Ð×öÉ¢Áк¯Êý£¬´æ·Å¼Ç¼µÄÊý×é½Ð×öÉ¢ÁÐ±í¡£
»ù±¾¸ÅÄî¡¡¡¡* Èô½á¹¹ÖдæÔڹؼü×ÖºÍKÏàµÈµÄ¼Ç¼£¬Ôò±Ø¶¨ÔÚf(K)µÄ´æ´¢Î»ÖÃÉÏ¡£ÓÉ´Ë£¬²»Ðè±È½Ï±ã¿ÉÖ±½ÓÈ¡µÃËù²é¼Ç¼¡£³ÆÕâ¸ö¶ÔÓ¦¹ØÏµfΪɢÁк¯Êý(Hash function)£¬°´Õâ¸ö˼Ï뽨Á¢µÄ±íΪɢÁÐ±í¡£
¡¡¡¡* ¶Ô²»Í¬µÄ¹Ø¼ü×Ö¿ÉÄܵõ½Í¬Ò»É¢ÁеØÖ·£¬¼´key1¡Ùkey2£¬¶øf(key1)=f(key2)£¬ÕâÖÖÏÖÏ󳯳åÍ»¡£¾ßÓÐÏàͬº¯ÊýÖµµÄ¹Ø¼ü×Ö¶Ô¸ÃÉ¢Áк¯ÊýÀ´Ëµ³Æ×öͬÒå´Ê¡£×ÛÉÏËùÊö£¬¸ù¾ÝÉ¢Áк¯ÊýH(key)ºÍ´¦Àí³åÍ»µÄ·½·¨½«Ò»×鹨¼ü×ÖÓ³Ïóµ½Ò»¸öÓÐÏÞµÄÁ¬ÐøµÄµØÖ·¼¯£¨Çø¼ä£©ÉÏ£¬²¢ÒԹؼü×ÖÔÚµØÖ·¼¯Öеġ°Ïó¡± ×÷Ϊ¼Ç¼ÔÚ±íÖеĴ洢λÖã¬ÕâÖÖ±í±ã³ÆÎªÉ¢ÁÐ±í£¬ÕâÒ»Ó³Ïó¹ý³Ì³ÆÎªÉ¢ÁÐÔì±í»òÉ¢ÁУ¬ËùµÃµÄ´æ´¢Î»ÖóÆÉ¢ÁеØÖ·¡£
¡¡¡¡* Èô¶ÔÓڹؼü×Ö¼¯ºÏÖеÄÈÎÒ»¸ö¹Ø¼ü×Ö£¬¾É¢Áк¯ÊýÓ³Ïóµ½µØÖ·¼¯ºÏÖÐÈκÎÒ»¸öµØÖ·µÄ¸ÅÂÊÊÇÏàµÈµÄ£¬Ôò³Æ´ËÀàÉ¢Áк¯ÊýΪ¾ùÔÈÉ¢Áк¯Êý(Uniform Hash function)£¬Õâ¾ÍÊÇʹ¹Ø¼ü×Ö¾¹ýÉ¢Áк¯ÊýµÃµ½Ò»¸ö¡°Ëæ»úµÄµØÖ·¡±£¬´Ó¶ø¼õÉÙ³åÍ»¡£
³£ÓõĹ¹ÔìÉ¢Áк¯ÊýµÄ·½·¨
¡¡¡¡É¢Áк¯ÊýÄÜʹ¶ÔÒ»¸öÊý¾ÝÐòÁеķÃÎʹý³Ì¸ü¼ÓѸËÙÓÐЧ£¬Í¨¹ýÉ¢Áк¯Êý£¬Êý¾ÝÔªËØ½«±»¸ü¿ìµØ¶¨Î»£º
¡¡¡¡1. Ö±½ÓѰַ·¨£ºÈ¡¹Ø¼ü×Ö»ò¹Ø¼ü×ÖµÄij¸öÏßÐÔº¯ÊýֵΪɢÁеØÖ·¡£¼´H(key)=key»òH(key) = a¡¤key + b£¬ÆäÖÐaºÍbΪ³£Êý£¨ÕâÖÖÉ¢Áк¯Êý½Ð×ö×ÔÉíº¯Êý£©
¡¡¡¡2. Êý×Ö·ÖÎö·¨£º·ÖÎöÒ»×éÊý¾Ý£¬±ÈÈçÒ»×éÔ±¹¤µÄ³öÉúÄêÔÂÈÕ£¬ÕâʱÎÒÃÇ·¢ÏÖ³öÉúÄêÔÂÈÕµÄǰ¼¸Î»Êý×Ö´óÌåÏàͬ£¬ÕâÑùµÄ»°£¬³öÏÖ³åÍ»µÄ¼¸ÂʾͻáºÜ´ó£¬µ«ÊÇÎÒÃÇ·¢ÏÖÄêÔÂÈյĺó¼¸Î»±íʾÔ·ݺ;ßÌåÈÕÆÚµÄÊý×Ö²î±ðºÜ´ó£¬Èç¹ûÓúóÃæµÄÊý×ÖÀ´¹¹³ÉÉ¢ÁеØÖ·£¬Ôò³åÍ»µÄ¼¸ÂÊ»áÃ÷ÏÔ½µµÍ¡£Òò´ËÊý×Ö·ÖÎö·¨¾ÍÊÇÕÒ³öÊý×ֵĹæÂÉ£¬¾¡¿ÉÄÜÀûÓÃÕâЩÊý¾ÝÀ´¹¹Ôì³åÍ»¼¸Âʽϵ͵ÄÉ¢ÁеØÖ·¡£
¡¡¡¡3. ƽ·½È¡Öз¨£ºÈ¡¹Ø¼ü×ÖÆ½·½ºóµÄÖм伸λ×÷ΪɢÁеØÖ·¡£
¡¡¡¡4. ÕÛµþ·¨£º½«¹Ø¼ü×Ö·Ö¸î³ÉλÊýÏàͬµÄ¼¸²¿·Ö£¬×îºóÒ»²¿·ÖλÊý¿ÉÒÔ²»Í¬£¬È»ºóÈ¡Õ⼸²¿·ÖµÄµþ¼ÓºÍ£¨È¥³ý½øÎ»£©×÷ΪɢÁеØÖ·¡£
¡¡¡¡5. Ëæ»úÊý·¨£ºÑ¡ÔñÒ»Ëæ»úº¯Êý£¬È¡¹Ø¼ü×ÖµÄËæ»úÖµ×÷ΪɢÁеØÖ·£¬Í¨³£ÓÃÓڹؼü×Ö³¤¶È²»Í¬µÄ³¡ºÏ¡£
¡¡¡¡6. ³ýÁôÓàÊý·¨£ºÈ¡¹Ø¼ü×Ö±»Ä³¸ö²»´óÓÚÉ¢Áбí±í³¤mµÄÊýp³ýºóËùµÃµÄÓàÊýΪɢÁеØÖ·¡£¼´ H(key) = key MOD p, p<=m¡£²»½ö¿ÉÒԶԹؼü×ÖÖ±½Óȡģ£¬Ò²¿ÉÔÚÕÛµþ¡¢Æ½·½È¡ÖеÈÔËËãÖ®ºóȡģ¡£¶ÔpµÄÑ¡ÔñºÜÖØÒª£¬Ò»°ãÈ¡ËØÊý»òm£¬ÈôpÑ¡µÄ²»ºÃ£¬ÈÝÒײúÉúͬÒå´Ê¡£
´¦Àí³åÍ»µÄ·½·¨
¡¡¡¡1. ¿ª·ÅѰַ·¨£ºHi=(H(key) + di) MOD m, i=1,2,¡, k(k<=m-1)£¬ÆäÖÐH(key)ΪɢÁк¯Êý£¬mΪɢÁÐ±í³¤£¬diΪÔöÁ¿ÐòÁУ¬¿ÉÓÐÏÂÁÐÈýÖÖÈ¡·¨£º
¡¡¡¡1.1. di=1,2,3,¡, m-1£¬³ÆÏßÐÔ̽²âÔÙÉ¢ÁУ»
¡¡¡¡1.2. di=1^2, -1^2, 2^2,-2^2, (3)^2, ¡, ¡À(k)^2,(k<=m/2)³Æ¶þ´Î̽²âÔÙÉ¢ÁÐ;
¡¡¡¡1.3. di=Î±Ëæ»úÊýÐòÁУ¬³ÆÎ±Ëæ»ú̽²âÔÙÉ¢ÁС£ ==
¡¡¡¡2. ÔÙÉ¢Áз¨£ºHi=RHi(key), i=1,2,¡,k RHi¾ùÊDz»Í¬µÄÉ¢Áк¯Êý£¬¼´ÔÚͬÒå´Ê²úÉúµØÖ·³åͻʱ¼ÆËãÁíÒ»¸öÉ¢Áк¯ÊýµØÖ·£¬Ö±µ½³åÍ»²»ÔÙ·¢Éú£¬ÕâÖÖ·½·¨²»ÒײúÉú¡°¾Û¼¯¡±£¬µ«Ôö¼ÓÁ˼ÆËãʱ¼ä¡£
¡¡¡¡3. Á´µØÖ··¨(ÀÁ´·¨)
¡¡¡¡4. ½¨Á¢Ò»¸ö¹«¹²Òç³öÇø
²éÕÒµÄÐÔÄÜ·ÖÎö
¡¡¡¡É¢ÁбíµÄ²éÕÒ¹ý³Ì»ù±¾ÉϺÍÔì±í¹ý³ÌÏàͬ¡£Ò»Ð©¹Ø¼üÂë¿Éͨ¹ýÉ¢Áк¯Êýת»»µÄµØÖ·Ö±½ÓÕÒµ½£¬ÁíһЩ¹Ø¼üÂëÔÚÉ¢Áк¯ÊýµÃµ½µÄµØÖ·ÉϲúÉúÁ˳åÍ»£¬ÐèÒª°´´¦Àí³åÍ»µÄ·½·¨½øÐвéÕÒ¡£ÔÚ½éÉܵÄÈýÖÖ´¦Àí³åÍ»µÄ·½·¨ÖУ¬²úÉú³åÍ»ºóµÄ²éÕÒÈÔÈ»ÊǸø¶¨ÖµÓë¹Ø¼üÂë½øÐбȽϵĹý³Ì¡£ËùÒÔ£¬¶ÔÉ¢Áбí²éÕÒЧÂʵÄÁ¿¶È£¬ÒÀÈ»ÓÃÆ½¾ù²éÕÒ³¤¶ÈÀ´ºâÁ¿¡£
¡¡¡¡²éÕÒ¹ý³ÌÖУ¬¹Ø¼üÂëµÄ±È½Ï´ÎÊý£¬È¡¾öÓÚ²úÉú³åÍ»µÄ¶àÉÙ£¬²úÉúµÄ³åÍ»ÉÙ£¬²éÕÒЧÂʾ͸ߣ¬²úÉúµÄ³åÍ»¶à£¬²éÕÒЧÂʾ͵͡£Òò´Ë£¬Ó°Ïì²úÉú³åÍ»¶àÉÙµÄÒòËØ£¬Ò²¾ÍÊÇÓ°Ïì²éÕÒЧÂʵÄÒòËØ¡£Ó°Ïì²úÉú³åÍ»¶àÉÙÓÐÒÔÏÂÈý¸öÒòËØ£º
¡¡¡¡1. É¢Áк¯ÊýÊÇ·ñ¾ùÔÈ£»
¡¡¡¡2. ´¦Àí³åÍ»µÄ·½·¨£»
¡¡¡¡3. É¢ÁбíµÄ×°ÌîÒò×Ó¡£
¡¡¡¡É¢ÁбíµÄ×°ÌîÒò×Ó¶¨ÒåΪ£º¦Á= ÌîÈë±íÖеÄÔªËØ¸öÊý / É¢ÁбíµÄ³¤¶È
¡¡¡¡¦ÁÊÇÉ¢Áбí×°Âú³Ì¶ÈµÄ±êÖ¾Òò×Ó¡£ÓÉÓÚ±í³¤ÊǶ¨Öµ£¬¦ÁÓë¡°ÌîÈë±íÖеÄÔªËØ¸öÊý¡±³ÉÕý±È£¬ËùÒÔ£¬¦ÁÔ½´ó£¬ÌîÈë±íÖеÄÔªËØ½Ï¶à£¬²úÉú³åÍ»µÄ¿ÉÄÜÐÔ¾ÍÔ½´ó£»¦ÁԽС£¬ÌîÈë±íÖеÄÔªËØ½ÏÉÙ£¬²úÉú³åÍ»µÄ¿ÉÄÜÐÔ¾ÍԽС¡£
¡¡¡¡Êµ¼ÊÉÏ£¬É¢ÁбíµÄƽ¾ù²éÕÒ³¤¶ÈÊÇ×°ÌîÒò×Ó¦ÁµÄº¯Êý£¬Ö»ÊDz»Í¬´¦Àí³åÍ»µÄ·½·¨Óв»Í¬µÄº¯Êý¡£
¡¡¡¡Á˽âÁËhash»ù±¾¶¨Ò壬¾Í²»Äܲ»Ìáµ½Ò»Ð©ÖøÃûµÄhashËã·¨£¬MD5 ºÍ SHA-1 ¿ÉÒÔ˵ÊÇĿǰӦÓÃ×î¹ã·ºµÄHashËã·¨£¬¶øËüÃǶ¼ÊÇÒÔ MD4 Ϊ»ù´¡Éè¼ÆµÄ¡£ÄÇôËûÃǶ¼ÊÇʲôÒâË¼ÄØ?
¡¡¡¡ÕâÀï¼òµ¥ËµÒ»Ï£º
¡¡¡¡£¨1) MD4
¡¡¡¡MD4(RFC 1320)ÊÇ MIT µÄ Ronald L. Rivest ÔÚ 1990 ÄêÉè¼ÆµÄ£¬MD ÊÇ Message Digest µÄËõд¡£ËüÊÊÓÃÔÚ32λ×Ö³¤µÄ´¦ÀíÆ÷ÉÏÓøßËÙÈí¼þʵÏÖ--ËüÊÇ»ùÓÚ 32 λ²Ù×÷ÊýµÄλ²Ù×÷À´ÊµÏֵġ£
¡¡¡¡£¨2) MD5
¡¡¡¡MD5(RFC 1321)ÊÇ Rivest ÓÚ1991Äê¶ÔMD4µÄ¸Ä½ø°æ±¾¡£Ëü¶ÔÊäÈëÈÔÒÔ512λ·Ö×飬ÆäÊä³öÊÇ4¸ö32λ×ֵļ¶Áª£¬Óë MD4 Ïàͬ¡£MD5±ÈMD4À´µÃ¸´ÔÓ£¬²¢ÇÒËٶȽÏÖ®ÒªÂýÒ»µã£¬µ«¸ü°²È«£¬ÔÚ¿¹·ÖÎöºÍ¿¹²î·Ö·½Ãæ±íÏÖ¸üºÃ
¡¡¡¡£¨3) SHA-1 ¼°ÆäËû
¡¡¡¡SHA1ÊÇÓÉNIST NSAÉè¼ÆÎªÍ¬DSAÒ»ÆðʹÓõģ¬Ëü¶Ô³¤¶ÈСÓÚ264µÄÊäÈ룬²úÉú³¤¶ÈΪ160bitµÄÉ¢ÁÐÖµ£¬Òò´Ë¿¹Çî¾Ù(brute-force)ÐÔ¸üºÃ¡£SHA-1 Éè¼ÆÊ±»ùÓÚºÍMD4ÏàͬÔÀí,²¢ÇÒÄ£·ÂÁ˸ÃËã·¨¡£
¡¡¡¡ÄÇôÕâЩHashËã·¨µ½µ×ÓÐʲôÓÃÄØ?
¡¡¡¡HashËã·¨ÔÚÐÅÏ¢°²È«·½ÃæµÄÓ¦ÓÃÖ÷ÒªÌåÏÖÔÚÒÔϵÄ3¸ö·½Ã棺
¡¡¡¡£¨1) ÎļþУÑé
¡¡¡¡ÎÒÃDZȽÏÊìϤµÄУÑéËã·¨ÓÐÆæÅ¼Ð£ÑéºÍCRCУÑ飬Õâ2ÖÖУÑ鲢ûÓп¹Êý¾Ý´Û¸ÄµÄÄÜÁ¦£¬ËüÃÇÒ»¶¨³Ì¶ÈÉÏÄܼì²â²¢¾ÀÕýÊý¾Ý´«ÊäÖеÄÐŵÀÎóÂ룬µ«È´²»ÄÜ·ÀÖ¹¶ÔÊý¾ÝµÄ¶ñÒâÆÆ»µ¡£
¡¡¡¡MD5 HashËã·¨µÄ"Êý×ÖÖ¸ÎÆ"ÌØÐÔ£¬Ê¹Ëü³ÉΪĿǰӦÓÃ×î¹ã·ºµÄÒ»ÖÖÎļþÍêÕûÐÔУÑéºÍ(Checksum)Ëã·¨£¬²»ÉÙUnixϵͳÓÐÌṩ¼ÆËãmd5 checksumµÄÃüÁî¡£
¡¡¡¡£¨2) Êý×ÖÇ©Ãû
¡¡¡¡Hash Ëã·¨Ò²ÊÇÏÖ´úÃÜÂëÌåϵÖеÄÒ»¸öÖØÒª×é³É²¿·Ö¡£ÓÉÓڷǶԳÆËã·¨µÄÔËËãËٶȽÏÂý£¬ËùÒÔÔÚÊý×ÖÇ©ÃûÐÒéÖУ¬µ¥ÏòÉ¢Áк¯Êý°çÑÝÁËÒ»¸öÖØÒªµÄ½ÇÉ«¡£ ¶Ô Hash Öµ£¬ÓÖ³Æ"Êý×ÖÕªÒª"½øÐÐÊý×ÖÇ©Ãû£¬ÔÚͳ¼ÆÉÏ¿ÉÒÔÈÏΪÓë¶ÔÎļþ±¾Éí½øÐÐÊý×ÖÇ©ÃûÊǵÈЧµÄ¡£¶øÇÒÕâÑùµÄÐÒ黹ÓÐÆäËûµÄÓŵ㡣
¡¡¡¡£¨3) ¼øÈ¨ÐÒé
¡¡¡¡ÈçϵļøÈ¨ÐÒéÓÖ±»³Æ×÷ÌôÕ½--ÈÏ֤ģʽ£ºÔÚ´«ÊäÐŵÀÊǿɱ»ÕìÌý£¬µ«²»¿É±»´Û¸ÄµÄÇé¿öÏ£¬ÕâÊÇÒ»ÖÖ¼òµ¥¶ø°²È«µÄ·½·¨¡£
¡¡¡¡MD5¡¢SHA1µÄÆÆ½â
¡¡¡¡2004Äê8ÔÂ17ÈÕ£¬ÔÚÃÀ¹ú¼ÓÖÝÊ¥°Å°ÅÀÕÙ¿ªµÄ¹ú¼ÊÃÜÂë´ó»áÉÏ£¬É½¶«´óѧÍõÐ¡ÔÆ½ÌÊÚÔÚ¹ú¼Ê»áÒéÉÏÊ×´ÎÐû²¼ÁËËý¼°ËýµÄÑо¿Ð¡×é½üÄêÀ´µÄÑо¿³É¹û¡ª¡ª¶ÔMD5¡¢HAVAL£128¡¢MD4ºÍRIPEMDµÈËĸöÖøÃûÃÜÂëËã·¨µÄÆÆÒë½á¹û¡£ ´ÎÄê¶þÔÂÐû²¼ÆÆ½âSHA-1ÃÜÂë¡£
ʵ¼ÊÓ¦ÓÃ
¡¡¡¡ÒÔÉϾÍÊÇһЩ¹ØÓÚhashÒÔ¼°ÆäÏà¹ØµÄһЩ»ù±¾Ô¤±¸ÖªÊ¶¡£ÄÇôÔÚemuleÀïÃæËû¾ßÌåÆðµ½Ê²Ã´×÷ÓÃÄØ?
¡¡¡¡´ó¼Ò¶¼ÖªµÀemuleÊÇ»ùÓÚP2P £¨Peer-to-peerµÄËõд£¬Ö¸µÄÊǵã¶ÔµãµÄÒâ˼µÄÈí¼þ£©£¬ Ëü²ÉÓÃÁË"¶àÔ´Îļþ´«ÊäÐÒ顱(MFTP£¬the Multisource FileTransfer Protocol)¡£ÔÚÐÒéÖУ¬¶¨ÒåÁËһϵÁд«Ê䡢ѹËõºÍ´ò°ü»¹Óлý·ÖµÄ±ê×¼£¬emule ¶ÔÓÚÿ¸öÎļþ¶¼ÓÐmd5-hashµÄËã·¨ÉèÖã¬ÕâʹµÃ¸ÃÎļþ¶ÀÒ»ÎÞ¶þ£¬²¢ÇÒÔÚÕû¸öÍøÂçÉ϶¼¿ÉÒÔ×·×ٵõ½¡£
¡¡¡¡Ê²Ã´ÊÇÎļþµÄhashֵĨ?
¡¡¡¡MD5-Hash-ÎļþµÄÊý×ÖÎÄժͨ¹ýHashº¯Êý¼ÆËãµÃµ½¡£²»¹ÜÎļþ³¤¶ÈÈçºÎ£¬ËüµÄHashº¯Êý¼ÆËã½á¹ûÊÇÒ»¸ö¹Ì¶¨³¤¶ÈµÄÊý×Ö¡£Óë¼ÓÃÜËã·¨²»Í¬£¬ÕâÒ»¸öHashËã·¨ÊÇÒ»¸ö²»¿ÉÄæµÄµ¥Ïòº¯Êý¡£²ÉÓð²È«ÐԸߵÄHashËã·¨£¬ÈçMD5¡¢SHAʱ£¬Á½¸ö²»Í¬µÄÎļþ¼¸ºõ²»¿ÉÄܵõ½ÏàͬµÄHash½á¹û¡£Òò´Ë£¬Ò»µ©Îļþ±»Ð޸ģ¬¾Í¿É¼ì²â³öÀ´¡£
¡¡¡¡µ±ÎÒÃǵÄÎļþ·Åµ½emuleÀïÃæ½øÐй²Ïí·¢²¼µÄʱºò£¬emule»á¸ù¾ÝhashËã·¨×Ô¶¯Éú³ÉÕâ¸öÎļþµÄhashÖµ£¬Ëû¾ÍÊÇÕâ¸öÎļþΨһµÄÉí·Ý±êÖ¾£¬Ëü°üº¬ÁËÕâ¸öÎļþµÄ»ù±¾ÐÅÏ¢,È»ºó°ÑËüÌá½»µ½ËùÁ¬½ÓµÄ·þÎñÆ÷¡£µ±ÓÐËûÈËÏë¶ÔÕâ¸öÎļþÌá³öÏÂÔØÇëÇóµÄʱºò£¬ Õâ¸öhashÖµ¿ÉÒÔÈÃËûÈËÖªµÀËûÕýÔÚÏÂÔØµÄÎļþÊDz»ÊǾÍÊÇËûËùÏëÒªµÄ¡£ÓÈÆäÊÇÔÚÎļþµÄÆäËûÊôÐÔ±»¸ü¸ÄÖ®ºó£¨ÈçÃû³ÆµÈ£©Õâ¸öÖµ¾Í¸üÏÔµÃÖØÒª¡£¶øÇÒ·þÎñÆ÷»¹ÌṩÁË,Õâ¸öÎļþµ±Ç°ËùÔÚµÄÓû§µÄµØÖ·,¶Ë¿ÚµÈÐÅÏ¢,ÕâÑùemule¾ÍÖªµÀµ½ÄÄÀïÈ¥ÏÂÔØÁË¡£
¡¡¡¡Ò»°ãÀ´½²ÎÒÃÇÒªËÑË÷Ò»¸öÎļþ£¬emuleÔڵõ½ÁËÕâ¸öÐÅÏ¢ºó£¬»áÏò±»Ìí¼ÓµÄ·þÎñÆ÷·¢³öÇëÇó£¬ÒªÇóµÃµ½ÓÐÏàͬhashÖµµÄÎļþ¡£¶ø·þÎñÆ÷Ôò·µ»Ø³ÖÓÐÕâ¸öÎļþµÄÓû§ÐÅÏ¢¡£ÕâÑùÎÒÃǵĿͻ§¶Ë¾Í¿ÉÒÔÖ±½ÓµÄºÍÓµÓÐÄǸöÎļþµÄÓû§¹µÍ¨£¬¿´¿´ÊDz»ÊÇ¿ÉÒÔ´ÓËûÄÇÀïÏÂÔØËùÐèµÄÎļþ¡£
¡¡¡¡¶ÔÓÚemuleÖÐÎļþµÄhashÖµÊ**̶¨µÄ£¬Ò²ÊÇΨһµÄ£¬Ëü¾ÍÏ൱ÓÚÕâ¸öÎļþµÄÐÅÏ¢ÕªÒª£¬ÎÞÂÛÕâ¸öÎļþÔÚ˵ĻúÆ÷ÉÏ£¬ËûµÄhashÖµ¶¼ÊDz»±äµÄ£¬ÎÞÂÛ¹ýÁ˶೤ʱ¼ä£¬Õâ¸öֵʼÖÕÈçÒ»£¬µ±ÎÒÃÇÔÚ½øÐÐÎļþµÄÏÂÔØÉÏ´«¹ý³ÌÖУ¬emule¶¼ÊÇͨ¹ýÕâ¸öÖµÀ´È·¶¨Îļþ¡£
¡¡¡¡ÄÇôʲôÊÇuserhashÄØ?
¡¡¡¡µÀÀíͬÉÏ£¬µ±ÎÒÃÇÔÚµÚÒ»´ÎʹÓÃemuleµÄʱºò£¬emule»á×Ô¶¯Éú³ÉÒ»¸öÖµ£¬Õâ¸öÖµÒ²ÊÇΨһµÄ£¬ËüÊÇÎÒÃÇÔÚemuleÊÀ½çÀïÃæµÄ±êÖ¾£¬Ö»ÒªÄã²»Ð¶ÔØ£¬²»É¾³ýconfig£¬ÄãµÄuserhashÖµÒ²¾ÍÓÀÔ¶²»±ä£¬»ý·ÖÖÆ¶È¾ÍÊÇͨ¹ýÕâ¸öÖµÔÚÆð×÷Óã¬emuleÀïÃæµÄ»ý·Ö±£´æ£¬Éí·Ýʶ±ð£¬¶¼ÊÇʹÓÃÕâ¸öÖµ£¬¶øºÍÄãµÄidºÍÄãµÄÓû§ÃûÎ޹أ¬ÄãËæ±ãÔõô¸ÄÕâЩ¶«Î÷£¬ÄãµÄuserhashÖµ¶¼ÊDz»±äµÄ£¬ÕâÒ²³ä·Ö±£Ö¤Á˹«Æ½ÐÔ¡£ÆäʵËûÒ²ÊÇÒ»¸öÐÅÏ¢ÕªÒª£¬Ö»²»¹ý±£´æµÄ²»ÊÇÎļþÐÅÏ¢£¬¶øÊÇÎÒÃÇÿ¸öÈ˵ÄÐÅÏ¢¡£
¡¡¡¡ÄÇôʲôÊÇhashÎļþÄØ?
¡¡¡¡ÎÒÃǾ³£ÔÚemuleÈÕÖ¾ÀïÃæ¿´µ½£¬emuleÕýÔÚhashÎļþ£¬ÕâÀï¾ÍÊÇÀûÓÃÁËhashËã·¨µÄÎļþУÑéÐÔÕâ¸ö¹¦ÄÜÁË£¬ÎÄÕÂÇ°ÃæÒѾ˵ÁËһЩÕâЩ¹¦ÄÜ£¬ÆäʵÕⲿ·ÖÊÇÒ»¸ö·Ç³£¸´ÔӵĹý³Ì£¬Ä¿Ç°ÔÚftp,btµÈÈí¼þÀïÃæ¶¼ÊÇÓõÄÕâ¸ö»ù±¾ÔÀí£¬emuleÀïÃæÊDzÉÓÃÎļþ·Ö¿é´«Ê䣬ÕâÑù´«ÊäµÄÿһ¿é¶¼Òª½øÐжԱÈУÑ飬Èç¹û´íÎóÔòÒª½øÐÐÖØÐÂÏÂÔØ£¬ÕâÆÚ¼äÕâЩÏà¹ØÐÅϢдÈëmetÎļþ£¬Ö±µ½Õû¸öÈÎÎñÍê³É£¬Õâ¸öʱºòpartÎļþ½øÐÐÖØÐÂÃüÃû£¬È»ºóʹÓÃmoveÃüÁ°ÑËü´«Ë͵½incomingÎļþÀïÃæ£¬È»ºómetÎļþ×Ô¶¯É¾³ý£¬ËùÒÔÎÒÃÇÓеÄʱºò»áÓöµ½hashÎļþʧ°Ü£¬¾ÍÊÇÖ¸µÄÊÇmetÀïÃæµÄÐÅÏ¢³öÁË´íÎó²»Äܹ»ºÍpartÎļþÆ¥Å䣬ÁíÍâÓеÄʱºò¿ª»úÒ²Òª·è¿ñhash£¬ÓÐÁ½ÖÖÇé¿öÒ»ÖÖÊÇÄãÔÚµÚÒ»´ÎʹÓã¬Õâ¸öʱºòÒªhashÌáÈ¡ËùÓÐÎļþÐÅÏ¢£¬»¹ÓÐÒ»ÖÖÇé¿ö¾ÍÊÇÉÏÒ»´ÎÄã·Ç·¨¹Ø»ú£¬ÄÇôÕâ¸öʱºò¾ÍÊÇÒª½øÐÐÅÅ´íУÑéÁË¡£
¡¡¡¡¹ØÓÚhashµÄËã·¨Ñо¿£¬Ò»Ö±ÊÇÐÅÏ¢¿ÆÑ§ÀïÃæµÄÒ»¸öÇ°ÑØ£¬ÓÈÆäÔÚÍøÂç¼¼ÊõÆÕ¼°µÄ½ñÌ죬ËûµÄÖØÒªÐÔÔ½À´Ô½Í»³ö£¬ÆäʵÎÒÃÇÿÌìÔÚÍøÉϽøÐеÄÐÅÏ¢½»Á÷°²È«ÑéÖ¤£¬ÎÒÃÇÔÚʹÓõIJÙ×÷ϵͳÃÜÔ¿ÔÀí£¬ÀïÃæ¶¼ÓÐËüµÄÉíÓ°£¬Ìرð¶ÔÓÚÄÇЩÑо¿ÐÅÏ¢°²È«ÓÐÐËȤµÄÅóÓÑ£¬Õâ¸üÊÇÒ»¸ö´ò¿ªÐÅÏ¢ÊÀ½çµÄÔ¿³×£¬ËûÔÚhackÊÀ½çÀïÃæÒ²ÊÇÒ»¸öÑо¿µÄ½¹µã¡£
¡¡¡¡Ò»°ãµÄÏßÐÔ±í¡¢Ê÷ÖУ¬¼Ç¼ÔڽṹÖеÄÏà¶ÔλÖÃÊÇËæ»úµÄ¼´ºÍ¼Ç¼µÄ¹Ø¼ü×ÖÖ®¼ä²»´æÔÚÈ·¶¨µÄ¹ØÏµ£¬ÔڽṹÖвéÕҼǼʱÐè½øÐÐһϵÁк͹ؼü×ֵıȽϡ£ÕâÒ»Àà²éÕÒ·½·¨½¨Á¢ÔÚ¡°±È½Ï¡±µÄ»ù´¡ÉÏ£¬²éÕÒµÄЧÂÊÓë±È½Ï´ÎÊýÃÜÇÐÏà¹Ø¡£ÀíÏëµÄÇé¿öÊÇÄÜÖ±½ÓÕÒµ½ÐèÒªµÄ¼Ç¼£¬Òò´Ë±ØÐëÔڼǼµÄ´æ´¢Î»ÖúÍËüµÄ¹Ø¼ü×ÖÖ®¼ä½¨Á¢Ò»È·¶¨µÄ¶ÔÓ¦¹ØÏµf£¬Ê¹Ã¿¸ö¹Ø¼ü×ֺͽṹÖÐÒ»¸öΨһµÄ´æ´¢Î»ÖÃÏà¶ÔÓ¦¡£Òò¶ø²éÕÒʱ£¬Ö»Ðè¸ù¾ÝÕâ¸ö¶ÔÓ¦¹ØÏµfÕÒµ½¸ø¶¨ÖµKµÄÏñf(K)¡£Èô½á¹¹ÖдæÔڹؼü×ÖºÍKÏàµÈµÄ¼Ç¼£¬Ôò±Ø¶¨ÔÚf(K)µÄ´æ´¢Î»ÖÃÉÏ£¬Óɴ˲»ÐèÒª½øÐбȽϱã¿ÉÖ±½ÓÈ¡µÃËù²é¼Ç¼¡£ÔÚ´Ë£¬³ÆÕâ¸ö¶ÔÓ¦¹ØÏµfΪ¹þÏ£º¯Êý£¬°´Õâ¸ö˼Ï뽨Á¢µÄ±íΪ¹þÏ£±í£¨ÓÖ³ÆÎªÔÓ´Õ·¨»òÉ¢ÁÐ±í£©¡£
¡¡¡¡¹þÏ£±í²»¿É±ÜÃâ³åÍ»(collision)ÏÖÏ󣺶Բ»Í¬µÄ¹Ø¼ü×Ö¿ÉÄܵõ½Í¬Ò»¹þÏ£µØÖ· ¼´key1¡Ùkey2£¬¶øhash(key1)=hash(key2)¡£¾ßÓÐÏàͬº¯ÊýÖµµÄ¹Ø¼ü×ֶԸùþÏ£º¯ÊýÀ´Ëµ³ÆÎªÍ¬Òå´Ê(synonym)¡£ Òò´Ë£¬ÔÚ½¨Ôì¹þÏ£±íʱ²»½öÒªÉ趨һ¸öºÃµÄ¹þÏ£º¯Êý£¬¶øÇÒÒªÉ趨һÖÖ´¦Àí³åÍ»µÄ·½·¨¡£¿ÉÈçÏÂÃèÊö¹þÏ£±í£º¸ù¾ÝÉ趨µÄ¹þÏ£º¯ÊýH(key)ºÍËùÑ¡ÖеĴ¦Àí³åÍ»µÄ·½·¨£¬½«Ò»×鹨¼ü×ÖÓ³Ïóµ½Ò»¸öÓÐÏ޵ġ¢µØÖ·Á¬ÐøµÄµØÖ·¼¯(Çø¼ä)Éϲ¢ÒԹؼü×ÖÔÚµØÖ·¼¯Öеġ°Ïó¡±×÷ΪÏàÓ¦¼Ç¼ÔÚ±íÖеĴ洢λÖã¬ÕâÖÖ±í±»³ÆÎª¹þÏ£±í¡£
¡¡¡¡¶ÔÓÚ¶¯Ì¬²éÕÒ±í¶øÑÔ£¬1) ±í³¤²»È·¶¨£»2)ÔÚÉè¼Æ²éÕÒ±íʱ£¬Ö»ÖªµÀ¹Ø¼ü×ÖËùÊô·¶Î§£¬¶ø²»ÖªµÀÈ·ÇеĹؼü×Ö¡£Òò´Ë£¬Ò»°ãÇé¿öÐ轨Á¢Ò»¸öº¯Êý¹ØÏµ£¬ÒÔf(key)×÷Ϊ¹Ø¼ü×ÖΪkeyµÄ¼ÔÚ±íÖеÄλÖã¬Í¨³£³ÆÕâ¸öº¯Êýf(key)Ϊ¹þÏ£º¯Êý¡£(×¢Ò⣺Õâ¸öº¯Êý²¢²»Ò»¶¨ÊÇÊýѧº¯Êý)
¡¡¡¡¹þÏ£º¯ÊýÊÇÒ»¸öÓ³Ï󣬼´£º½«¹Ø¼ü×ֵļ¯ºÏÓ³É䵽ij¸öµØÖ·¼¯ºÏÉÏ£¬ËüµÄÉèÖúÜÁé»î£¬Ö»ÒªÕâ¸öµØÖ·¼¯ºÏµÄ´óС²»³¬³öÔÊÐí·¶Î§¼´¿É¡£
¡¡¡¡ÏÖʵÖйþÏ£º¯ÊýÊÇÐèÒª¹¹ÔìµÄ£¬²¢ÇÒ¹¹ÔìµÄºÃ²ÅÄÜʹÓõĺá£
¡¡¡¡ÓÃ;£º¼ÓÃÜ£¬½â¾ö³åÍ»ÎÊÌâ¡£¡£¡£¡£
¡¡¡¡ÓÃ;ºÜ¹ã£¬±ÈÌØ¾«ÁéÖоÍʹÓÃÁ˹þÏ£º¯Êý£¬Äã¿É ÒÔ×Ô¼º¿´¿´¡£
¡¡¡¡¾ßÌå¿ÉÒÔѧϰһÏÂÊý¾Ý½á¹¹ºÍËã·¨µÄÊé¡£
×Ö·û´®¹þÏ£º¯Êý
¡¡¡¡£¨ÖøÃûµÄELFhashËã·¨£©
¡¡¡¡int ELFhash(char *key)
¡¡¡¡{
¡¡¡¡unsigned long h=0;
¡¡¡¡while(*key)
¡¡¡¡{
¡¡¡¡h=(h<<4)+*key++;
¡¡¡¡unsigned long g=h&0Xf0000000L;
¡¡¡¡if(g)
¡¡¡¡h^=g>>24;
¡¡¡¡h&=~g;
¡¡¡¡}
¡¡¡¡return h%MOD;
¡¡¡¡}
http://baike.baidu.com/view/329976.htm