區(qū)塊鏈幸運哈希值算法競猜游戲系統(tǒng)開發(fā),聯(lián)系薇芯:hkkf5566,哈希值dapp軟件定制,游戲玩法規(guī)則定制,功能開發(fā),歡迎隨時打擾小編
我們可以簡單認(rèn)為哈希值就是將“賬頁信息”進(jìn)行哈希算法,計算得到一串字符密碼,那么哈希算法就是區(qū)塊鏈保證交易信息不被篡改的單向密碼機(jī)制。哈希算法在接收一段明文(也就是賬頁信息)后,以一種不可逆的方式將其轉(zhuǎn)化為一段長度較短、位數(shù)固定的散列數(shù)據(jù)。
它有兩個特點:
1. 加密過程不可逆,也就是說我們無法通過輸出的散列數(shù)據(jù)倒推原本的明文是什么。可以這樣理解:小明對火星人說了一段話,火星人將這段話翻譯成了%*……¥&&%% @,地球人沒有一個人能將%*……¥&&%%@翻譯出來,這樣就保證了誰也不能篡改小明的那段話了。
2. 輸入的明文與輸出的散列數(shù)據(jù)一一對應(yīng),任何一個輸入信息的變化,都必將導(dǎo)致終輸出的散列數(shù)據(jù)的變化,這意味著這篇賬頁就算改了一個標(biāo)點符號也會被發(fā)現(xiàn),區(qū)塊鏈這個賬簿就將不承認(rèn)這篇賬頁了。
那么什么叫哈希算法呢?
哈希算法是一種加密算法
哈希函數(shù)(Hash Function),也稱為散列函數(shù)或雜湊函數(shù)。哈希函數(shù)是一個公開函數(shù),可以將任意長度的消息M,映射成為一個長度較短且長度固定的值H(M),稱H(M)為哈希值、散列值(Hash Value)、雜湊值或者消息摘要(Message Digest)。它是一種單向密碼體制,即一個從明文到密文的不可逆映射,只有加密過程,沒有解密過程。
它的函數(shù)表達(dá)式為:h=H(m)
無論輸入是什么數(shù)字格式、文件有多大,輸出都是固定長度的比特串。以比特幣使用的Sh256算法為例,無論輸入是什么數(shù)據(jù)文件,輸出就是256bit。
每個bit就是一位0或者1,256bit就是256個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位 (比特串也沒有跑出周易的64卦)。
于是你通常看到的哈希值,就是這樣的了:
00740f40257a13bf03b40f54a9fe398c79a664bb21cfa2870ab07888b21eeba8。
這是從上隨便拷貝的一個哈希值,不放心的話你可以數(shù)一下,是不是64位~
Hash函數(shù)的特點
哈希(Hash)函數(shù)具有如下特點。
易壓縮:對于任意大小的輸入x,Hash值的長度很小,在實際應(yīng)用中,函數(shù)H產(chǎn)生的Hash值,其長度是固定的。
易計算:對于任意給定的消息,計算其Hash值比較容易。
單向性:對于給定的Hash值,要找到使得在解算上是不可行的,即求得Hash的逆向解算,很困難。在給定某個哈希函數(shù)H和哈希值H(M)的情況下,你想得出M,這在計算上是不可行的。即從哈希輸出無法倒推輸入的原始數(shù)值。這是哈希函數(shù)性的基礎(chǔ)。
抗碰撞性:理想的Hash函數(shù)是無碰撞的,但在實際算法的設(shè)計中很難做到這一點。
有兩種抗碰撞性:一種是弱抗碰撞性,即對于給定的消息,要發(fā)現(xiàn)另一個消息,滿足在計算上是不可行的;另一種是強(qiáng)抗碰撞性,即對于任意一對不同的消息,使得在計算上也是不可行的。
高靈敏性:這是從比特位角度出發(fā)的,指的是1比特位的輸入變化會造成1/2的比特位發(fā)生變化。消息M的任何改變都會導(dǎo)致哈希值H(M)發(fā)生改變。即如果輸入有微小不同,哈希運算后的輸出一定不同。
哈希算法
把網(wǎng)址A,轉(zhuǎn)換成數(shù)字1。網(wǎng)址B,轉(zhuǎn)換成數(shù)字2。
一個網(wǎng)址X,轉(zhuǎn)換成數(shù)字N,根據(jù)數(shù)字N作為下標(biāo),就可以快速地查找出網(wǎng)址X的信息。這個轉(zhuǎn)換的過程就是哈希算法。
比如這里有一萬首歌,給你一首新的歌X,要求你確認(rèn)這首歌是否在那一萬首歌之內(nèi)。
無疑,將一萬首歌一個一個比對非常慢。但如果存在一種方式,能將一萬首歌的每首數(shù)據(jù)濃縮到一個數(shù)字(稱為哈希碼)中(也就是利用哈希算法得到一系列的哈希值,即哈希碼),于是得到一萬個數(shù)字(哈希碼),那么用同樣的算法計算新的歌X的編碼,看看歌X的編碼是否在之前那一萬個數(shù)字中,就能知道歌X是否在那一萬首歌中。
作為例子,如果要你組織那一萬首歌,一個簡單的哈希算法就是讓歌曲所占硬盤的字節(jié)數(shù)作為哈希碼。這樣的話,你可以讓一萬首歌“按照大小排序”,然后遇到一首新的歌,只要看看新的歌的字節(jié)數(shù)是否和已有的一萬首歌中的某一首的字節(jié)數(shù)相同,就知道新的歌是否在那一萬首歌之內(nèi)了。
一個可靠的哈希算法,應(yīng)該滿足:
對于給定的數(shù)據(jù)M,很容易算出哈希值X=F(M);
根據(jù)X很難反算出M;
很難找到M和N使得F(N)=F(M)(這就是哈希值的不可解密性)
舉個栗子:
小星與阿呆即時聊天中
阿呆:小星,今天來我家玩,來的路上,有一家披薩店,很好吃,順便帶一點哈。
小星:哦,要不你來我家玩吧,你順便帶上披薩。