来自不同输入的相同迭代计数的两个哈希输出总是不同吗?

时间:2016-07-07 02:50:54

标签: database hash unique-constraint sha

我认为我相信同一输入的相同迭代计数的哈希输出总是相同。

让我们说两个不同的输入。

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。

1 个答案:

答案 0 :(得分:1)

对于长度大于摘要大小的输入,所有哈希最终都会发生冲突。此外,即使对于接近摘要大小的输入,也很少有人试图保证不会发生碰撞

经常如何发生 - 在典型的,迂腐的或类似的输入下 - 是哈希质量的结果。

(例如,保证CRC具有不同的输入哈希值,只需一位改变 - 但安全哈希不能提供这种哈希值)