dan*_*dan 17 algorithm sha1 probability hmac
我正在创建一个存储文档的应用程序,并根据一些内容(包括时间戳)的SHA1摘要为每个文档提供一个UID.摘要有很多字符,我想允许用户使用完整摘要的前x个字符来识别文档.如果文档的数量可能在10K到100K左右,x的价值是多少?
bdo*_*lan 20
在维基百科上调整公式以解决生日问题,您可以将碰撞概率近似为e^(-n^2/(2^(b+1)))
,n
文档计数在哪里以及b
位数.用n = 100,000绘制这个公式,看起来你至少要b> 45.我更倾向于使用64来使它成为一个漂亮的圆形数字.也就是说,如果发生碰撞,确实有计划处理碰撞(可能会略微改变时间戳,或添加一个nonce?)
就此而言,如果sha1不仅仅基于文档的内容,为什么不简单地将它作为随机ID呢?在这种情况下,碰撞不是一个问题,因为你总是可以生成一个新的随机数并再试一次(然而,与单次尝试碰撞的概率是相同的).