本文出處轉(zhuǎn)自https://www.sohu.com/a/232586831_100078137,https://www.cnblogs.com/mengfanrong/p/4034950.html
哈希是一種加密算法
哈希函數(shù)(Hash Function),也稱為散列函數(shù)或雜湊函數(shù)育瓜。哈希函數(shù)是一個(gè)公開(kāi)函數(shù),可以將任意長(zhǎng)度的消息M映射成為一個(gè)長(zhǎng)度較短且長(zhǎng)度固定的值H(M)咳燕,稱H(M)為哈希值也祠、散列值(Hash Value)插龄、雜湊值或者消息摘要(Message Digest)愿棋。它是一種單向密碼體制,即一個(gè)從明文到密文的不可逆映射均牢,只有加密過(guò)程糠雨,沒(méi)有解密過(guò)程。
散列表,它是基于高速存取
的角度設(shè)計(jì)的徘跪,也是一種典型的“空間換時(shí)間”
的做法甘邀。顧名思義,該數(shù)據(jù)結(jié)構(gòu)能夠理解為一個(gè)線性表垮庐,可是當(dāng)中的元素不是緊密排列的松邪,而是可能存在空隙。
散列表(Hash table哨查,也叫哈希表)逗抑,是依據(jù)關(guān)鍵碼值(Key value)而直接進(jìn)行訪問(wèn)的數(shù)據(jù)結(jié)構(gòu)。也就是說(shuō),它通過(guò)把關(guān)鍵碼值映射到表中一個(gè)位置來(lái)訪問(wèn)記錄邮府,以加快查找的速度荧关。這個(gè)映射函數(shù)叫做散列函數(shù)
,存放記錄的數(shù)組叫做散列表
褂傀。
它的函數(shù)表達(dá)式為:h=H(m)
無(wú)論輸入是什么數(shù)字格式忍啤、文件有多大,輸出都是固定長(zhǎng)度的比特串紊服。以比特幣使用的Sh256算法為例檀轨,無(wú)論輸入是什么數(shù)據(jù)文件胸竞,輸出就是256bit欺嗤。
每個(gè)bit就是一位0或者1,256bit就是256個(gè)0或者1二進(jìn)制數(shù)字串卫枝,用16進(jìn)制數(shù)字表示的話煎饼,就是多少位呢?
16等于2的4次方校赤,所以每一位16進(jìn)制數(shù)字可以代表4位bit吆玖。那么,256位bit用16進(jìn)制數(shù)字表示马篮,當(dāng)然是256除以4等于64位沾乘。
Hash函數(shù)具有如下特點(diǎn)。
1浑测、易壓縮:對(duì)于任意大小的輸入x翅阵,Hash值的長(zhǎng)度很小,在實(shí)際應(yīng)用中迁央,函數(shù)H產(chǎn)生的Hash值其長(zhǎng)度是固定的掷匠。
2、易計(jì)算:對(duì)于任意給定的消息岖圈,計(jì)算其Hash值比較容易讹语。
3、單向性:對(duì)于給定的Hash值蜂科,要找到使得在計(jì)算上是不可行的顽决,即求Hash的逆很困難。在給定某個(gè)哈希函數(shù)H和哈希值H(M)的情況下导匣,得出M在計(jì)算上是不可行的擎值。即從哈希輸出無(wú)法倒推輸入的原始數(shù)值。這是哈希函數(shù)安全性的基礎(chǔ)逐抑。
4鸠儿、抗碰撞性:理想的Hash函數(shù)是無(wú)碰撞的,但在實(shí)際算法的設(shè)計(jì)中很難做到這一點(diǎn)。
有兩種抗碰撞性:一種是弱抗碰撞性进每,即對(duì)于給定的消息汹粤,要發(fā)現(xiàn)另一個(gè)消息,滿足在計(jì)算上是不可行的田晚;另一種是強(qiáng)抗碰撞性嘱兼,即對(duì)于任意一對(duì)不同的消息,使得在計(jì)算上也是不可行的贤徒。
5芹壕、高靈敏性:這是從比特位角度出發(fā)的,指的是1比特位的輸入變化會(huì)造成1/2的比特位發(fā)生變化接奈。消息M的任何改變都會(huì)導(dǎo)致哈希值H(M)發(fā)生改變踢涌。即如果輸入有微小不同,哈希運(yùn)算后的輸出一定不同序宦。
Hash算法在信息安全方面的應(yīng)用主要體如今下面的3個(gè)方面:
(1) 文件校驗(yàn)
我們比較熟悉的校驗(yàn)算法有奇偶校驗(yàn)和CRC校驗(yàn)睁壁,這2種校驗(yàn)并沒(méi)有抗數(shù)據(jù)篡改的能力,它們一定程度上能檢測(cè)并糾正傳輸數(shù)據(jù)中的信道誤碼互捌,但卻不能防止對(duì)數(shù)據(jù)的惡意破壞潘明。
MD5 Hash算法的"數(shù)字指紋"特性,使它成為眼下應(yīng)用最廣泛的一種文件完整性校驗(yàn)和(Checksum)算法秕噪,不少Unix系統(tǒng)有提供計(jì)算md5 checksum的命令钳降。
(2) 數(shù)字簽名
Hash 算法也是現(xiàn)代password體系中的一個(gè)重要組成部分。因?yàn)榉菍?duì)稱算法的運(yùn)算速度較慢腌巾,所以在數(shù)字簽名協(xié)議中遂填,單向散列函數(shù)扮演了一個(gè)重要的角色。 對(duì) Hash 值壤躲,又稱"數(shù)字摘要"進(jìn)行數(shù)字簽名城菊,在統(tǒng)計(jì)上能夠覺(jué)得與對(duì)文件本身進(jìn)行數(shù)字簽名是等效的。并且這種協(xié)議還有其它的長(zhǎng)處碉克。
(3) 鑒權(quán)協(xié)議
例如以下的鑒權(quán)協(xié)議又被稱作挑戰(zhàn)--認(rèn)證模式:在傳輸信道是可被偵聽(tīng)凌唬,但不可被篡改的情況下,這是一種簡(jiǎn)單而安全的方法漏麦。