2010-09-29 46 views
21

這裏有3例MD5哈希散列(md5,sha1)的任何子字符串是否比另一個更「隨機」?

$ md5 -s "1" && md5 -s "2" && md5 -s "3" 
MD5 ("1") = c4ca4238a0b923820dcc509a6f75849b 
MD5 ("2") = c81e728d9d4c2f636f067f89cc14862c 
MD5 ("3") = eccbc87e4b5ce2fe28308fd9f2a7baf3 

說我要拍8個字符的任何哈希值。散列的開始部分是否比結尾更「隨機」?中間?還是所有的子串都是「隨機的」?

+0

在我看來,「隨機」在這裏不是合適的詞。散列函數和它們一樣是確定性的;根本不涉及隨機性。你可能會問,一個散列的子字符串是否具有與原始相同的串通抗性(當然,這是考慮到不同的長度)。 – Jens 2010-09-29 08:07:09

+0

我剛纔要問這個問題.. – insaner 2016-04-17 05:15:33

回答

17

我很好奇自己,所以我繼續寫了program來進行測試。您需要Crypto++來編譯代碼。

免責聲明: 當涉及到密碼學,或者甚至只是一般的數學,我知道剛剛足以拍攝自己的腳。所以,用一點鹽做出以下結果,並記住我只對我正在使用的工具有粗略的瞭解。

我只採樣三次,子:前8個字​​節,中間的8個字節,最後8個字節。長話短說,他們同樣是隨機的。

然而,使用較小的樣本空間時,它顯示爲如果最後的8位是稍微更隨機的。採樣空間越大,三個子串越接近完全隨機性。


1000次迭代:

First: 0.995914 
Middle: 0.996546 
Last: 0.998104 

5000迭代:

First: 0.998387 
Middle: 0.998624 
Last: 0.999501 

10000迭代:

First: 0.999614 
Middle: 0.999457 
Last: 1 

30000迭代:

First: 1 
Middle: 1 
Last: 1 

「隨機性」 是由加密++的類MaurerRandomnessTest測量。作爲參考,從上面的代碼編譯的可執行文件具有的0.632411一個隨機值和古騰堡計劃下載莎士比亞的麥克白的副本有一個0.566991隨機值。

+0

我正在接受它,因爲它實際上表明瞭「隨機性」。謝謝@ kurige! – 2010-09-29 17:53:23

11

好的哈希的所有子(和MD5是儘管是加密不安全的相當不錯)同樣是隨機的,所以是的,把你從字符串喜歡的任何位,就應該平均分配。

9

雞蛋裏挑骨頭:「隨機」是錯詞用在這裏,因爲散列函數是確定性的。

至於回答你的意思:),散列函數的一個理想屬性是實現Avalanche effect:基本上,讓每一位輸入都會導致輸出的劇烈變化。因此,對於精心設計的散列,每個子字符串應該與其他任何字符串一樣受到相同的影響(「」與其他任何子字符串都是隨機的)。

+1

爲了鏈接到雪崩效果,我把這個詞隨機引入引號中。 – 2010-09-29 17:54:47

相關問題