2016-07-07 48 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保证具有不同的哈希值,以便输入可以通过单个位进行更改 - 但安全哈希不能提供该值)

相关问题