雜湊演算法 雜湊演算法hash 理解筆記 編輯中

2021-09-25 07:53:56 字數 2527 閱讀 3015

雜湊演算法

有兩個特點:

● 加密過程不可逆,意味著我們無法通過輸出的雜湊資料倒推原本的明文是什麼;

● 輸入的明文與輸出的雜湊資料一一對應,任何乙個輸入資訊的變化,都必將導致最終輸出的雜湊資料的變化。

在區塊鏈中,通常使用sha-256(安全雜湊演算法)進行區塊加密,這種演算法的輸入長度為256位,輸出的是一串長度為32位元組的隨機雜湊資料。

下面舉個例子詳細了解下

▌場景

一、小星和阿呆在籃球場

小星:阿呆,你是不是口渴了,你要不要去買水喝,順便幫我買一瓶哈。

阿呆:呵呵,你的小心思我還不知道,你自己也口渴了吧,你去,我不去。

小星:哎哎,咱們不扯這些沒用的,來拋硬幣,好不好,正面你去,反面我去,公平吧,如何?

阿呆:好吧。

………▌場景

二、小星與阿呆即時聊天中

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

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

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

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

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

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=b2.b^2=c3.取c中第2~4位數,組成乙個3位數d4.d/12的結果求餘數,得到e

1.a+123=b2.b^2=c3.取c中第2~4位數,組成乙個3位數d4.d/12的結果求餘數,得到e

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

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

5+123=128128^2=16384d=638 e=638mod12=53

5+123=128128^2=16384d=638 e=638mod12=53

(mod表示除法的求餘數)

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

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

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

問題:阿呆有沒有可能事先找出一奇一偶,按上述加密運算得到一樣的結果呢?

答案:有可能的,如何解決這個問題呢?增加上述演算法的難度,以至於阿呆很難找到。

3.雜湊演算法

1.對於給定的資料m,很容易算出雜湊值x=f(m);

2.根據x很難反算出m;3.很難找到m和n使得f(n)=f(m)。

密碼學中的雜湊函式有3個重要的性質,

1即抗碰撞性、

2原像不可逆、

3難題友好性。

碰撞性,就是指阿呆事先找出一奇一偶使得雜湊結果一致,但這在計算上是不可行的。

首先,把大空間的訊息壓縮到小空間上,碰撞肯定是存在的。假設雜湊值長度固定為256位,如果順序取1,2,…2^256+1, 這2^256+1個輸入值,逐一計算其雜湊值,肯定能找到兩個輸入值使得其雜湊值相同。但不要高興的太早,因為你得有時間把它算出來,才是你的。

為什麼這麼說呢?

根據生日悖論,如果隨機挑選其中的2^128+1輸入,則有99.8%的概率發現至少一對碰撞輸入。那麼對於雜湊值長度為256位的雜湊函式,平均需要完成2^128次雜湊計算,才能找到碰撞對。如果計算機每秒進行10000次雜湊計算,需要約10^27年才能完成2^128次雜湊計算。

所以,不要想著阿呆作弊了,因為估計也活不了這麼久。當然如果計算機運算能力大幅提公升,就有可能,這也是為什麼說量子計算機對區塊鏈有影響了。

那這個有什麼用途呢?

用來驗證資訊的完整性,因為如果資訊在傳遞過程中被篡改,那麼執行雜湊計算得到的雜湊值與原來的雜湊值不一樣。在區塊鏈中,雜湊函式的抗碰撞性用來做區塊和交易的完整性驗證,一有篡改就能被識別出來。

參考:《看完這些,你就徹底理解「雜湊演算法」了》

Hash雜湊演算法

hash演算法 雜湊演算法將任意長度的二進位制值對映為較短的固定長度的二進位制值,短的二進位制值稱為雜湊值。雜湊值是一段資料唯一且極其緊湊的數值表示形式。如果雜湊一段明文而且哪怕只更改該段落的乙個字母,隨後的雜湊都將產生不同的值。要找到雜湊為同乙個值的兩個不同的輸入,在計算上是不可能的,所以資料的雜...

hash演算法(雜湊)

hash 演算法 什麼hash 演算法 簡單地來講就是將字串轉化為乙個整數。它一般應用於字串的場景中。現在我們來講hash演算法。hash 公式 hash i hash i 1 base str i a 1 mod base的值是隨機的,意思就是你自己可以去選擇任意的數,但是按照經驗值表明,一般ba...

經典的hash演算法 常見hash 雜湊演算法

計算理論中,沒有hash函式的說法,只有單向函式的說法。所謂的單向函式,是乙個複雜的定義,大家可以去看計算理論或者密碼學方面的資料。用 人 類 的語言描述單向函式就是 如果某個函式在給定輸入的時候,很容易計算出其結果來 而當給定結果的時候,很難計算出輸入來,這就是單項函式。各種加密函 數都可以被認為...