如果你從事編程,或者對(duì)區(qū)塊鏈感興趣,那么哈希這個(gè)詞肯定經(jīng)常聽到,那么哈希到底是什么,今天就簡(jiǎn)單聊一聊。
首先我有一個(gè)算法,有一個(gè)輸入和一個(gè)輸出,換句話說當(dāng)你輸入一個(gè)數(shù)據(jù),我返回給你一個(gè)數(shù)據(jù)。我們假定一下我的算法是 +1,然后算法的輸入和輸出都是數(shù)字,當(dāng)你輸入一個(gè)數(shù)字時(shí),我返回給你一個(gè)數(shù)字,那么根據(jù)我這個(gè)算法,我們就知道,當(dāng)你輸入一個(gè)數(shù)字時(shí),輸出的一定是另外一個(gè)數(shù)字,因?yàn)槲逸敵龅臄?shù)字是在你的基礎(chǔ)上加一,而且我們也知道沒有最大的數(shù)字(不考慮計(jì)算機(jī)能使用的最大數(shù)值),這樣就有一個(gè)明顯的特點(diǎn):輸入的數(shù)據(jù)不同,輸出的數(shù)據(jù)一定不同。
這只是哈希的一個(gè)特點(diǎn),并且我上面的例子并不是非常確定,首先上面的例子,當(dāng)我知道輸出的數(shù)據(jù)是什么的時(shí)候,我可以推算出輸入的數(shù)據(jù)是什么。這樣是非常不安全的,如果哈希算法是這樣,那么也就沒有用了。那么下一個(gè)特點(diǎn)就出來了:根據(jù)輸出結(jié)果,不能計(jì)算出輸入結(jié)果。就是說在上一個(gè)特點(diǎn)的基礎(chǔ)上,我們不僅讓輸出的數(shù)據(jù)唯一,而且輸出的數(shù)據(jù)不能在推算出輸入數(shù)據(jù)。
在我們第一個(gè)例子中,我們輸出的數(shù)字大小是無限的,也就是說,輸出的數(shù)據(jù)的長(zhǎng)度不是固定的,而且是根據(jù)你輸入的數(shù)據(jù)來改變的。這也不是我們想要的。那么另外一個(gè)特點(diǎn)就出來了:輸出的數(shù)據(jù)是固定長(zhǎng)度。舉個(gè)例子,在之前的例子中,我們輸入1,輸出2,輸入10,輸出11。在保持新的特點(diǎn)時(shí),就可能是這樣,輸入1,輸出:164728798263,輸入2,輸出:875730978359。不僅輸出的數(shù)據(jù)不固定了,而且長(zhǎng)度也固定了。
不知道根據(jù)上面的例子大家有沒有發(fā)現(xiàn)另外一個(gè)特點(diǎn),當(dāng)我輸入1和輸入2時(shí),輸出的兩個(gè)數(shù)據(jù)差距非常大,不錯(cuò),這也是一個(gè)特點(diǎn):輸入的兩個(gè)數(shù)據(jù)差別不大時(shí),輸出的數(shù)據(jù)差距非常大。大家可能會(huì)想,那我如果輸入兩個(gè)差距很大的數(shù)據(jù),那么輸出的差別是不是就很小了?當(dāng)然不是,這個(gè)特點(diǎn)主要是說,無論你輸入什么數(shù)據(jù),只要是不同的,輸出的數(shù)據(jù)肯定不同,而且差別很大。

hash
不知道大家有沒有想過,當(dāng)我們輸出的數(shù)據(jù)定長(zhǎng),并差距很大,而且根據(jù)輸入數(shù)據(jù)唯一時(shí),那么會(huì)不會(huì)發(fā)生碰撞,就是說當(dāng)我輸入兩個(gè)數(shù)據(jù)時(shí),有沒有可能輸出兩個(gè)相同的數(shù)據(jù)。從數(shù)學(xué)上來說,這是一定可能發(fā)生的,當(dāng)我們定長(zhǎng)時(shí),那么輸出的數(shù)據(jù)一定是有限的,假如我們輸出的數(shù)據(jù)個(gè)數(shù)是n,那么當(dāng)我們輸入了n+1次不同的數(shù)據(jù)時(shí),那么肯定有兩個(gè)是相同的,這是一定的。但是在現(xiàn)實(shí)中這是不可行的,因?yàn)槿绻覀円鰊+1次操作的話,如果使用計(jì)算機(jī)來操作,很有可能是需要幾十年甚至幾百年的。想一下 ipv6,可以讓世界上每一粒沙子都配一個(gè)ip,大概就是這個(gè)意思了。
怎么樣,哈希沒有那么難吧,理解起來非常簡(jiǎn)單,但是實(shí)現(xiàn)起來就不簡(jiǎn)單了,目前有很多的算法:MD4,MD5,SHA 家族等等,都是為了實(shí)現(xiàn)哈希,但是 MD5 已經(jīng)完成碰撞了。好在現(xiàn)在我們不需要實(shí)現(xiàn)這個(gè)算法了,只需要知道如何使用就可以了,如果想要認(rèn)識(shí)區(qū)塊鏈,那么哈希一定是第一步。
感謝閱讀,祝大家生活愉快!