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