我目前正在使用SHA1来稍微缩短网址:

Digest::SHA1.hexdigest("salt-" + url)

仅将SHA1的前8个字符用作唯一标识符有多安全?就像GitHub显然对提交所做的那样?

最佳答案

要计算给定长度的碰撞概率和您拥有的哈希数,请参见birthday problem。我不知道您将拥有多少个哈希,但是这里有一些示例。 8个十六进制字符为32位,因此,对于大约100个散列,发生冲突的可能性约为1/1,000,000,对于10,000个散列,则约为1/100,对于100,000个散列则为3/4,依此类推。

请参阅Wikipedia上Birthday attack文章中的表格,以找到满足您需要的良好哈希长度。例如,如果您希望对于一组超过100,000个散列的冲突,发生的可能性小于1/1,000,000,000,则使用64位或16个十六进制数字。

这完全取决于您要拥有多少个散列,以及您愿意接受哪种碰撞概率(因为总有一些概率,即使疯狂地很小)。

关于security - 我如何安全地假设SHA1哈希的一部分具有唯一性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5388781/

10-15 04:45