我认为我相信同一输入的相同迭代计数的哈希输出总是相同。
让我们说两个不同的输入。
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)
,我想知道是否应该将列设置为UNIQUE。
答案 0 :(得分:1)
对于长度大于摘要大小的输入,所有哈希最终都会发生冲突。此外,即使对于接近摘要大小的输入,也很少有人试图保证不会发生碰撞
经常如何发生 - 在典型的,迂腐的或类似的输入下 - 是哈希质量的结果。
(例如,保证CRC具有不同的输入哈希值,只需一位改变 - 但安全哈希不能提供这种哈希值)