區塊鏈雜湊值演算法遊戲開發原理玩法規則定製

nice1022發表於2022-03-29

近期很多人問小編,最近市場火熱的區塊鏈雜湊值是什麼?什麼叫雜湊演算法呢?原理是什麼?本文講著重講解這部分內容

區塊鏈幸運雜湊值演算法競猜遊戲系統開發,聯絡薇芯:hkkf5566,雜湊值dapp軟體定製,遊戲玩法規則定製,功能開發,歡迎隨時打擾小編


我們可以簡單認為雜湊值就是將“賬頁資訊”進行雜湊演算法,計算得到一串字元密碼,那麼雜湊演算法就是區塊鏈保證交易資訊不被篡改的單向密碼機制。雜湊演算法在接收一段明文(也就是賬頁資訊)後,以一種不可逆的方式將其轉化為一段長度較短、位數固定的雜湊資料。


它有兩個特點:

1. 加密過程不可逆,也就是說我們無法通過輸出的雜湊資料倒推原本的明文是什麼。可以這樣理解:小明對火星人說了一段話,火星人將這段話翻譯成了%*……¥&&%% @,地球人沒有一個人能將%*……¥&&%%@翻譯出來,這樣就保證了誰也不能篡改小明的那段話了。

2. 輸入的明文與輸出的雜湊資料一一對應,任何一個輸入資訊的變化,都必將導致最終輸出的雜湊資料的變化,這意味著這篇賬頁就算改了一個標點符號也會被發現,區塊鏈這個賬簿就將不承認這篇賬頁了。

那麼什麼叫雜湊演算法呢?

雜湊演算法是一種加密演算法

雜湊函式(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。

這是從btc.com上隨便拷貝的一個雜湊值,不放心的話你可以數一下,是不是64位~


Hash函式的特點

雜湊(Hash)函式具有如下特點。

易壓縮:對於任意大小的輸入x,Hash值的長度很小,在實際應用中,函式H產生的Hash值,其長度是固定的。

易計算:對於任意給定的訊息,計算其Hash值比較容易。

單向性:對於給定的Hash值,要找到使得在解算上是不可行的,即求得Hash的逆向解算,很困難。在給定某個雜湊函式H和雜湊值H(M)的情況下,你想得出M,這在計算上是不可行的。即從雜湊輸出無法倒推輸入的原始數值。這是雜湊函式安全性的基礎。

抗碰撞性:理想的Hash函式是無碰撞的,但在實際演算法的設計中很難做到這一點。

有兩種抗碰撞性:一種是弱抗碰撞性,即對於給定的訊息,要發現另一個訊息,滿足在計算上是不可行的;另一種是強抗碰撞性,即對於任意一對不同的訊息,使得在計算上也是不可行的。

高靈敏性:這是從位元位角度出發的,指的是1位元位的輸入變化會造成1/2的位元位發生變化。訊息M的任何改變都會導致雜湊值H(M)發生改變。即如果輸入有微小不同,雜湊運算後的輸出一定不同。

雜湊演算法

把網址A,轉換成數字1。網址B,轉換成數字2。

一個網址X,轉換成數字N,根據數字N作為下標,就可以快速地查詢出網址X的資訊。這個轉換的過程就是雜湊演算法。

比如這裡有一萬首歌,給你一首新的歌X,要求你確認這首歌是否在那一萬首歌之內。

無疑,將一萬首歌一個一個比對非常慢。但如果存在一種方式,能將一萬首歌的每首資料濃縮到一個數字(稱為雜湊碼)中(也就是利用雜湊演算法得到一系列的雜湊值,即雜湊碼),於是得到一萬個數字(雜湊碼),那麼用同樣的演算法計算新的歌X的編碼,看看歌X的編碼是否在之前那一萬個數字中,就能知道歌X是否在那一萬首歌中。

作為例子,如果要你組織那一萬首歌,一個簡單的雜湊演算法就是讓歌曲所佔硬碟的位元組數作為雜湊碼。這樣的話,你可以讓一萬首歌“按照大小排序”,然後遇到一首新的歌,只要看看新的歌的位元組數是否和已有的一萬首歌中的某一首的位元組數相同,就知道新的歌是否在那一萬首歌之內了。

一個可靠的雜湊演算法,應該滿足:

對於給定的資料M,很容易算出雜湊值X=F(M);

根據X很難反算出M;

很難找到M和N使得F(N)=F(M)(這就是雜湊值的不可解密性)

舉個例子:

小星與阿呆即時聊天中

阿呆:小星,今天來我家玩,來的路上,有一家披薩店,很好吃,順便帶一點哈。

小星:哦,要不你來我家玩吧,你順便帶上披薩。

阿呆:小星,你竟然都這麼說了,看來只能拋硬幣解決了。

小星:丫的,這個怎麼拋,我怎麼知道你有沒有搞鬼。

阿呆:嗯,那到也是,要不這樣。

1慮對結果加密阿呆:我心中想一個數,假設為A,然後A在乘以一個數B,得到結果C。A是我的金鑰,我把結果C告訴你。你來猜A是奇數還是偶數,猜中了,算你贏。

小星:這不行,如果你告訴我C是12,我猜A是奇數,你可以說A是4,B是3。我猜A是偶數,你可以說A是3,B是4。要不你告訴我C是多少的時候,也告訴我B是多少。

阿呆:那這不行,告訴你C和B,不等於告訴你A是多少了,還猜個屁。不行得換個方式。

2不可逆加密阿呆:小星,你看這樣可以不,我想一個A,經過下面的過程:

1.A+123=B

2.B^2=C

3.取C中第2~4位數,組成一個3位數D

4.D/12的結果求餘數,得到E

阿呆:我把E和上述計算方式都告訴你,你猜A是奇數還是偶數,然後我告訴你A是多少,你可以按上述的計算過程來驗證我是否有說謊。

小星:嗯,我想想,假如阿呆你想的A為5,那麼:

5+123=128

128^2=16384

D=638 E=638mod12=53

(mod表示除法的求餘數)

小星:咦,厲害了,一個A值對應一個唯一的E值,根據E還推算不出來A。你太賤了,好吧,這個算公平,誰撒謊都能被識別出來。

小星:阿呆,你出題吧 ……

這種丟掉一部分資訊的加密方式稱為“單向加密”,也叫雜湊演算法。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70011332/viewspace-2884681/,如需轉載,請註明出處,否則將追究法律責任。

相關文章