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

Do two hash output of same iteration count from different input always different?

我认为我相信相同输入的相同迭代次数的哈希输出总是产生相同的结果。

假设有两个不同的输入。

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。

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

在典型的、迂腐的或类似的输入下,经常 发生的情况是散列质量的结果。

(例如,CRC 保证具有不同的散列值,用于仅更改一位的输入 - 但安全散列值不能提供)