您可以截断SHA1哈希多少并合理确定具有唯一ID?
问题内容:
我正在制作一个存储文件的应用程序,并根据包括时间戳在内的一些内容的SHA1摘要为每个文件提供一个UID。摘要有很多字符,我希望允许用户使用完整摘要的前x个字符来识别文档。如果文档数量可能在10K-100K左右,那么x的一个好值是什么?
问题答案:
调整Wikipedia上有关生日问题的公式,您可以将碰撞概率近似为1 - e^(-n^2/(2^(b+1)))
,其中n
文档数和b
位数是。用n =
100,000绘制该公式
,看起来您至少需要b>
45。我更倾向于使用64,使其成为一个不错的整数。也就是说,是否有应对冲突的计划(可能会稍微更改时间戳或添加随机数?)
为此,如果sha1不仅基于文档的内容,为什么不简单地使其成为随机ID?在这种情况下,冲突就不再是问题,因为您始终可以生成一个新的随机数并重试(但是一次尝试发生冲突的可能性是相同的)。