如果我使用字节大小比数据(例如sha-256)更大的散列算法散列大小受限的类似数据(例如社会安全号码),那么散列将保证相同的级别唯一性作为原始数据?
答案 0 :(得分:5)
您始终可以创建保证唯一性的自定义哈希。对于已知域中的数据(如SSN),练习相对简单。
如果您的目标哈希值实际上比您正在哈希的位数更多,则哈希只是将输入值映射到其中一个可用输出值。这将是一个简单的线性映射,从输入值作为多字节整数到输出作为多字节整数。
当目标哈希值的位数少于被哈希值时,则无法保证唯一性。
答案 1 :(得分:5)
哈希冲突的概率与输入字符串的大小无关(除非它指示您需要保持唯一性所需的输入数量)。当您使用完美散列算法散列0和1时,可能会发生散列冲突,尽管可能性为1 /(2 ^位长)。在SHA-256的情况下实际上是零。
哈希碰撞是生日悖论的问题。在256位散列的情况下,两个输入之间的冲突概率完全取决于输入的数量,并且是:答案 2 :(得分:2)
其他人指出,碰撞不应该是一个问题;这是加密安全散列函数的重点。我想添加以下内容:
答案 3 :(得分:1)
如果您正在使用像SHA这样的加密哈希,那么简短的回答是肯定的。
答案 4 :(得分:1)
cryptographically secure hash function的一个关键特征是,无论输入如何,您都可以避免无可置疑的碰撞。这对于输出短于输出大小的输入也是有效的,这与具有小熵的较长消息相同。所以你可以使用SHA-2而不用担心碰撞。