我目前正在使用 SHA1 来稍微缩短 url:
Digest::SHA1.hexdigest("salt-" + url)
仅使用 SHA1 的前 8 个字符作为唯一标识符(就像 GitHub 对提交所做的那样)有多安全?
要计算给定长度和哈希数的冲突概率,请参阅生日问题 http://en.wikipedia.org/wiki/Birthday_problem。我不知道您将拥有多少哈希值,但这里有一些示例。 8 个十六进制字符是 32 位,因此对于大约 100 个哈希值,冲突的概率约为 1/1,000,000,对于 10,000 个哈希值,碰撞概率约为 1/100,对于 100,000 个哈希值,碰撞概率约为 3/4,等等。
请参阅表中的生日袭击 http://en.wikipedia.org/wiki/Birthday_attack#The_mathematics维基百科上的文章可以找到满足您需求的良好哈希长度。例如,如果您希望对于超过 100,000 个哈希值的集合,冲突的可能性小于 1/1,000,000,000,则使用 64 位或 16 个十六进制数字。
这完全取决于您将拥有多少个哈希值以及您愿意接受的碰撞概率是多少(因为总是存在一定的概率,即使概率非常小)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)