2016-07-07 71 views
0

我想我相信一個相同輸入的迭代計數相同的散列輸出總是相同的。做不同輸入的相同迭代計數的兩個散列輸出總是不同的?

讓我們假設兩個不同的輸入。

static byte[] hash(byte[] bytes, final int count) 
    throws NoSuchAlgorithmException { 
    final MessageDigest digest = MessageDigest.getInstance("SHA-256"); 
    for (int i = 0; i < count; i++) { 
     bytes = digest.digest(bytes); 
    } 
    return bytes; 
} 

有兩個不同的輸入,兩個輸出相同的計數總是不一樣嗎?

byte[] john = digest("john".getBytes(), 1024); 
byte[] jane = digest("jane".getBytes(), 1024); 

我打算來定義我的數據庫的用戶名列BINARY(32),我不知道我是否應該設置列中唯一與否。

回答

1

所有散列最終都會明顯地碰撞,輸入的長度大於摘要的大小。此外,即使對於接近摘要大小的輸入,也幾乎沒有嘗試保證缺少碰撞,這是發生在典型的,迂腐的或類似的輸入下的,是質量的結果哈希。

(例如,CRC保證具有不同的哈希值,以便輸入可以通過單個位進行更改 - 但安全哈希不能提供該值)

相關問題