日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

hash算法和常见的hash函数 [转]

發(fā)布時間:2023/10/11 综合教程 178 老码农
生活随笔 收集整理的這篇文章主要介紹了 hash算法和常见的hash函数 [转] 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
   Hash,就是把任意長度的輸入,通過散列算法,變換成固定長度的輸出,該輸出就是散列值。
這種轉(zhuǎn)換是一種壓縮映射,也就是,散列值的空間通常遠小于輸入的空間,不同的輸入可能
會散列成相同的輸出,而不可能從散列值來唯一的確定輸入值。數(shù)學表述為:h = H(M) ,
其中H( )--單向散列函數(shù),M--任意長度明文,h--固定長度散列值。
  
 在信息安全領(lǐng)域中應用的Hash算法,還需要滿足其他關(guān)鍵特性:   
   第一當然是單向性(one-way),從預映射,能夠簡單迅速的得到散列值,而在計算上不可能構(gòu)造一個預映
射,使其散列結(jié)果等于某個特定的散列值,即構(gòu)造相應的M=H-1(h)不可行。這樣,散列值就能在統(tǒng)計上唯一的
表征輸入值,因此,密碼學上的 Hash 又被稱為"消息摘要(messagedigest)",就是要求能方便的將"消息"進
行"摘要",但在"摘要"中無法得到比"摘要"本身更多的關(guān)于"消息"的信息。
  
   第二是抗沖突性(collision-resistant),即在統(tǒng)計上無法產(chǎn)生2個散列值相同的預映射。給定M,計算上
無法找到M',滿足H(M)=H(M') ,此謂弱抗沖突性;計算上也難以尋找一對任意的M和M',使?jié)M足H(M)=H(M')
,此謂強抗沖突性。要求"強抗沖突性"主要是為了防范 所謂"生日攻擊(birthdayattack)",在一個10人的團
體中,你能找到和你生日相同的人的概率是2.4%,而在同一團體中,有2人生日相同的概率是11.7%。類似的,
當預映射的空間很大的情況下,算法必須有足夠的強度來保證不能輕易找到"相同生日"的人。       第三是映射分布均勻性和差分分布均勻性,散列結(jié)果中,為 0 的 bit 和為 1 的 bit ,其總數(shù)應該大致
相等;輸入中一個 bit的變化,散列結(jié)果中將有一半以上的 bit 改變,這又叫做"雪崩效應(avalanche effect)";
要實現(xiàn)使散列結(jié)果中出現(xiàn) 1bit的變化,則輸入中至少有一半以上的 bit 必須發(fā)生變化。其實質(zhì)是必須使輸入
中每一個 bit 的信息, 盡量均勻的反映到輸出的每一個 bit上去;輸出中的每一個 bit,都是輸入中盡可能
多 bit 的信息一起作用的結(jié)果。Damgard 和 Merkle定義了所謂“壓縮函數(shù)(compression function)”,就是
將一個固定長度輸入,變換成較短的固定長度的輸出,這對密碼學實踐上Hash函數(shù)的設計產(chǎn)生了很大的影響。
Hash函數(shù)就是被設計為基于通過特定壓縮函數(shù)的不斷重復“壓縮”輸入的分組和前一次壓縮處理的結(jié)果的過程,
直到整個消息都被壓縮完畢,最后的輸出作為整個消息的散列值。盡管還缺乏嚴格的證明,但絕大多數(shù)業(yè)界的
研究者都同意,如果壓縮函數(shù)是安全的,那么以上述形式散列任意長度的消息也將是安全的。任意長度的消息
被分拆成符合壓縮函數(shù)輸入要求的分組,最后一個分組可能需要在末尾添上特定的填充字節(jié),這些分組將被順
序處理,除了第一個消息分組將與散列初始化值一起作為壓縮函數(shù)的輸入外,當前分組將和前一個分組的壓縮
函數(shù)輸出一起被作為這一次壓縮的輸入,而其輸出又將被作為下一個分組壓縮函數(shù)輸入的一部分,直到最后一
個壓縮函數(shù)的輸出,將被作為整個消息散列的結(jié)果。MD5 和 SHA1 可以說是目前應用最廣泛的Hash算法,而它
們都是以MD4 為基礎設計的。
設計高效算法往往需要使用Hash鏈表,常數(shù)級的查找速度是任何別的算法無法比擬的,Hash鏈表的構(gòu)造和沖突
的不同實現(xiàn)方法對效率當然有一定的影響,然而Hash函數(shù)是Hash鏈表最核心的部分,下面是幾款經(jīng)典軟件中使
用到的字符串Hash函數(shù)實現(xiàn),通過閱讀這些代碼,我們可以在Hash算法的執(zhí)行效率、離散性、空間利用率等方
面有比較深刻的了解。
下面分別介紹幾個經(jīng)典軟件中出現(xiàn)的字符串Hash函數(shù)。

●PHP中出現(xiàn)的字符串Hash函數(shù)
static unsigned long hashpjw(char *arKey, unsigned int nKeyLength)
{
unsigned long h = 0, g;
char *arEnd=arKey+nKeyLength; while (arKey < arEnd) {
h = (h << 4) + *arKey++;
if ((g = (h & 0xF0000000))) {
h = h ^ (g >> 24);
h = h ^ g;
}
} return h;
}

OpenSSL中出現(xiàn)的字符串Hash函數(shù)

unsigned long lh_strhash(char *str)
{
int i,l;
unsigned long ret=0;
unsigned short *s; if (str == NULL) return(0);
l=(strlen(str)+1)/2;
s=(unsigned short *)str; for (i=0; i<l; i++)
ret^=(s[i]<<(i&0×0f)); return(ret);
} /* The following hash seems to work very well on normal text strings
* no collisions on /usr/dict/words and it distributes on %2^n quite
* well, not as good as MD5, but still good.
*/
unsigned long lh_strhash(const char *c)
{
unsigned long ret=0;
long n;
unsigned long v;
int r; if ((c == NULL) || (*c == ‘\0′))
return(ret); /*
unsigned char b[16];
MD5(c,strlen(c),b);
return(b[0]|(b[1]<<8)|(b[2]<<16)|(b[3]<<24));
*/ n=0×100;
while (*c)
{
v=n|(*c);
n+=0×100;
r= (int)((v>>2)^v)&0×0f;
ret=(ret(32-r));
ret&=0xFFFFFFFFL;
ret^=v*v;
c++;
} return((ret>>16)^ret);
}

MySql中出現(xiàn)的字符串Hash函數(shù)

#ifndef NEW_HASH_FUNCTION 

/* Calc hashvalue for a key (區(qū)分大小寫)*/
static uint calc_hashnr(const byte *key,uint length)
{
register uint nr=1, nr2=4; while (length––)
{
nr^= (((nr & 63)+nr2)*((uint) (uchar) *key++))+ (nr << 8);
nr2+=3;
} return((uint) nr);
} /* Calc hashvalue for a key, case indepenently (不區(qū)分大小寫) */
static uint calc_hashnr_caseup(const byte *key,uint length)
{
register uint nr=1, nr2=4; while (length–)
{
nr^= (((nr & 63)+nr2)*((uint) (uchar) toupper(*key++)))+ (nr << 8);
nr2+=3;
} return((uint) nr);
} #else
/*
* Fowler/Noll/Vo hash
*
* The basis of the hash algorithm was taken from an idea sent by email to the
* IEEE Posix P1003.2 mailing list from Phong Vo (kpv@research.att.com) and
* Glenn Fowler (gsf@research.att.com). Landon Curt Noll (chongo@toad.com)
* later improved on their algorithm.
*
* The magic is in the interesting relationship between the special prime
* 16777619 (2^24 + 403) and 2^32 and 2^8.
*
* This hash produces the fewest collisions of any function that we’ve seen so
* far, and works well on both numbers and strings.
*/ //(區(qū)分大小寫)
uint calc_hashnr(const byte *key, uint len)
{
const byte *end=key+len;
uint hash; for (hash = 0; key < end; key++)
{
hash *= 16777619;
hash ^= (uint) *(uchar*) key;
} return (hash);
} //(不區(qū)分大小寫)
uint calc_hashnr_caseup(const byte *key, uint len)
{
const byte *end=key+len;
uint hash; for (hash = 0; key < end; key++)
{
hash *= 16777619;
hash ^= (uint) (uchar) toupper(*key);
} return (hash);
}
#endif

另一個經(jīng)典字符串Hash函數(shù)

unsigned int hash(char *str)
{
register unsigned int h;
register unsigned char *p; for(h=0, p = (unsigned char *)str; *p ; p++)
h = 31 * h + *p; return h;
}

總結(jié)

以上是生活随笔為你收集整理的hash算法和常见的hash函数 [转]的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 一级黄在线观看 | 久久av无码精品人妻出轨 | 天天插av| 久久久精品动漫 | 久久久香蕉网 | 色中文| 成年人黄色小视频 | 中文字幕91在线 | 欧美日韩在线播放视频 | 国产经典久久 | 91网站在线观看视频 | 懂色av,蜜臀av粉嫩av | 99re6这里有精品热视频 | 台湾swag在线观看 | 国产富婆一级全黄大片 | 中文字幕久久精品 | 人人妻人人澡人人爽精品 | 国产美女av | 亚洲在线网站 | 亚洲一区二区三区四区在线播放 | 日韩一区二区在线播放 | 五月婷婷丁香花 | 国产精品卡一卡二 | 日本视频二区 | 亚洲一级影片 | 国产91清纯白嫩初高中在线观看 | 久久综合av | 亚欧美色图 | 精品人妻一区二区三区在线视频 | 亚洲无码精品在线播放 | 午夜免费小视频 | 少妇乱淫36部 | 精品无码一区二区三区在线 | av第一页 | 亚洲爽爆av | 91精品国产综合久久香蕉 | 欧美日韩极品 | 日韩一区二区三区免费 | 卡通动漫av| 最新中文字幕 | 久久精品无码Av中文字幕 | 美女让男人捅 | 麻豆av一区二区三区在线观看 | 韩国av毛片 | 在线观看av的网址 | 欧美日韩在线免费播放 | 日韩性生活视频 | 国产精品--色哟哟 | 永久精品| 久久久久xxxx | 久久露脸国语精品国产 | 欧美精品一区二区在线播放 | 国产视频欧美视频 | 国产一级二级三级精品 | av色播 | 国产美女免费看 | 国产精品久久久久久免费免熟 | 热精品| 国产经典毛片 | 91精彩刺激对白 | www在线视频 | 伊人天堂在线 | 国精产品一区一区三区mba下载 | 都市激情自拍偷拍 | 国产成人久久777777 | 成人欧美一区二区三区小说 | 国产热视频 | 777黄色 | 久操社区 | 91精品视频网站 | 亚洲精品在线播放视频 | 久久精品久久久久 | 香蕉av在线 | 性欧美欧美巨大69 | 亚洲成人不卡 | 国产九九九精品 | r级无码视频在线观看 | 欧美日韩精品亚洲精品 | 中文字幕视频一区 | 中文字幕8 | 精品国产一区二区三区在线 | 午夜激情在线观看视频 | 欧美7777 | 少妇做爰免费理伦电影 | 亚洲色图第1页 | 波多野结衣在线免费视频 | 欧美日韩一区二区在线观看 | 久久99热人妻偷产国产 | 亚洲天堂中文在线 | 国产精品视频导航 | 色乱码一区二区三区在线男奴 | www三级| 超碰在线色 | 黑料视频在线观看 | 日日夜夜狠 | 日韩一区二区在线观看 | 日本不卡高字幕在线2019 | 高清国产午夜精品久久久久久 | 极品美女啪啪 |