【发布时间】:2010-02-22 10:44:49
【问题描述】:
如果我使用比数据(例如 sha-256)更大字节大小的哈希算法对大小受限的类似数据(例如社会安全号码)进行哈希处理,哈希是否能保证相同级别的作为原始数据的唯一性?
【问题讨论】:
标签: hash unique sha256 hash-code-uniqueness
如果我使用比数据(例如 sha-256)更大字节大小的哈希算法对大小受限的类似数据(例如社会安全号码)进行哈希处理,哈希是否能保证相同级别的作为原始数据的唯一性?
【问题讨论】:
标签: hash unique sha256 hash-code-uniqueness
散列冲突的概率与输入字符串的大小无关(除非它表明需要多少个输入来保持唯一性)。当您使用完美的散列算法散列 0 和 1 时,可能会发生散列冲突,尽管可能性是 1/(2^bit-length)。在 SHA-256 的情况下实际上为零。
哈希冲突是一个生日悖论问题。在 256 位哈希的情况下,两个输入之间发生冲突的概率完全取决于输入的数量,并且是:
【讨论】:
1 - 部分 - 除非您试图表达 no 冲突的概率。顺便问一下,你能给我们这个公式的来源吗?
您始终可以创建一个确保唯一性的自定义哈希。对于已知域(如 SSN)中的数据,练习相对简单。
如果您的目标哈希值实际上具有比您正在哈希的更多位,则哈希只是将输入值映射到可用输出值之一。这将是一个简单的线性映射,从作为多字节整数的输入值到作为多字节整数的输出。
如果您的目标哈希值的位数少于被哈希的位数,则无法保证唯一性。
【讨论】:
其他人指出不应该担心碰撞;这就是密码安全散列函数的全部意义所在。我只想添加以下内容:
【讨论】:
如果您使用的是像 SHA 这样的加密哈希,那么简短的回答是肯定的。
【讨论】:
cryptographically secure hash function 的一个关键特性是,无论输入如何,您都可以安全地避免发生合理怀疑的碰撞。这对于短于输出大小的输入也是有效的,这与熵很小的较长消息相同。因此,您可以使用 SHA-2 而不必担心冲突。
【讨论】: