是否存在可以保证哈希算法唯一的情况?

mat*_*att 7 hash hash-code-uniqueness unique sha256

如果我使用比数据(例如sha-256)更大的字节大小的散列算法散列大小受限的类似数据(例如社会安全号),那么散列将保证与单词相同的唯一性级别.原始数据?

S.L*_*ott 5

您始终可以创建自定义哈希,以保证唯一性.对于已知域中的数据(如SSN),练习相对简单.

如果您的目标哈希值实际上比您正在哈希的位数更多,则哈希只是将输入值映射到其中一个可用输出值.这将是一个简单的线性映射,从输入值作为多字节整数到输出作为多字节整数.

当您的目标哈希值比正在哈希值的位数少时,则无法保证唯一性.


Mic*_*any 5

散列冲突的概率与输入字符串的大小无关(除非它指示您需要保持唯一性所需的输入数量).当您使用完美散列算法散列0和1时,可能会发生散列冲突,尽管可能性为1 /(2 ^位长).在SHA-256的情况下实际上是零.

哈希碰撞是生日悖论的问题.在256位散列的情况下,两个输入之间的冲突概率完全取决于输入的数量,并且是:

  • 1 - (2 ^ 256)!/((2 ^ 256 ^ inputcount)*(2 ^ 256-inputcount)!)或正如其他人所说的那样 - 对于合理数量的输入,基本上为零.


Die*_*nte 1

如果您使用的是 SHA 之类的加密哈希,那么简短的答案是肯定的。

  • @Novelcrat,对原始问题的“简短”回答是肯定的。虽然理论上碰撞是可能的,但发现碰撞的平均时间比太阳演化成红巨星并摧毁地球所需的时间要长得多。 (3认同)