1. Hash是什么厉萝,它的作用
哈希算法(Hash Algorithm),又稱散列算法榨崩,是一種從任意數(shù)據(jù)中提取小的數(shù)字的方法谴垫。散列算法就是一種以較短的信息來保數(shù)據(jù)唯一性的標(biāo)志,這種標(biāo)志與數(shù)據(jù)的每一個(gè)字節(jié)都相關(guān)母蛛,而且難以找到逆向規(guī)律翩剪。因此,當(dāng)原數(shù)據(jù)發(fā)生改變時(shí)彩郊,其標(biāo)志值也會發(fā)生改變前弯。
2. Hash算法有什么特點(diǎn)
一個(gè)優(yōu)秀的 hash 算法,將能實(shí)現(xiàn):
- 正向快速:給定數(shù)據(jù)和 hash 算法秫逝,在有限時(shí)間和有限資源內(nèi)能計(jì)算出 hash 值恕出。
- 逆向困難:給定hash 值,在有限時(shí)間內(nèi)很難逆推出數(shù)據(jù)违帆。
- 輸入敏感:原始輸入信息修改一點(diǎn)信息浙巫,產(chǎn)生的 hash 值看起來應(yīng)該都有很大不同。
- 沖突避免:很難找到兩段內(nèi)容不同的明文,使得它們的 hash 值一致(發(fā)生沖突)的畴。
但在不同的使用場景中渊抄,如數(shù)據(jù)結(jié)構(gòu)和安全領(lǐng)域里,其中對某一些特點(diǎn)會有所側(cè)重丧裁。
3. Hash在管理數(shù)據(jù)結(jié)構(gòu)中的應(yīng)用
以HashMap為例护桦,key(hash值)對應(yīng)一個(gè)(或多個(gè)數(shù)據(jù)),key的作用是渣慕,對于抗碰撞的要求沒有那么高嘶炭。換句話說,hash出來的key逊桦,只要保證value大致均勻的放在不同的桶里就可以了眨猎。但整個(gè)算法的set性能,直接與hash值產(chǎn)生的速度有關(guān)强经,所以這時(shí)候的hash值的產(chǎn)生速度就尤為重要睡陪,如JDK中的String.hashCode():
public int hashCode() {
int h = hash;
if (h == 0 && value.length > 0) {
char val[] = value;
for (int i = 0; i < value.length; i++) {
h = 31 * h + val[i];
}
hash = h;
}
return h;
}
4. Hash在在密碼學(xué)中的應(yīng)用
在密碼學(xué)中,hash算法的作用主要是用于消息摘要和簽名匿情,對整個(gè)消息的完整性進(jìn)行校驗(yàn)兰迫。這對于抗碰撞和抗篡改能力要求極高,對速度的要求在其次炬称。以MD5為例汁果,其輸出長度為128位,設(shè)計(jì)預(yù)期碰撞概率為1/(2^128)玲躯,這是一個(gè)極小極小的數(shù)字.
5. Hash有哪些流行的算法
目前流行的 Hash 算法包括 MD5据德、SHA-1 和 SHA-2。
- MD4(RFC 1320)是 MIT 的 Ronald L. Rivest 在 1990 年設(shè)計(jì)的跷车,MD 是 Message Digest 的縮寫棘利。其輸出為 128 位。MD4 已證明不夠安全朽缴。
- MD5(RFC 1321)是 Rivest 于1991年對 MD4 的改進(jìn)版本善玫。它對輸入仍以 512 位分組,其輸出是 128 位密强。MD5 比 MD4 復(fù)雜茅郎,并且計(jì)算速度要慢一點(diǎn),更安全一些或渤。MD5 已被證明不具備”強(qiáng)抗碰撞性”系冗。
- SHA (Secure Hash Algorithm)是一個(gè) Hash 函數(shù)族,由 NIST(National Institute of Standards and Technology)于 1993 年發(fā)布第一個(gè)算法劳坑。目前知名的 SHA-1 在 1995 年面世毕谴,它的輸出為長度 160 位的 hash 值,因此抗窮舉性更好。SHA-1 設(shè)計(jì)時(shí)基于和 MD4 相同原理涝开,并且模仿了該算法循帐。SHA-1 已被證明不具”強(qiáng)抗碰撞性”。
- 為了提高安全性舀武,NIST 還設(shè)計(jì)出了 SHA-224拄养、SHA-256、SHA-384银舱,和 SHA-512 算法(統(tǒng)稱為 SHA-2)瘪匿,跟 SHA-1 算法原理類似。SHA-3 相關(guān)算法也已被提出寻馏。
可以看出棋弥,上面這幾種流行的算法,它們最重要的一點(diǎn)區(qū)別就是”強(qiáng)抗碰撞性”诚欠。