本计算用于验证128位的安全性

已知从 [1, n] 内随机每个数字的概率为 1 / n,每次产生一个随机数字需要消耗时间为 s

然后,随机 m 次,都不出现 1 的概率为 [(n-1)/n]^m,那么出现的 1 的概率即为 1- [(n-1)/n]^m

实验得到,在2的28次方内随机出1大约需要时间 10000 ms,那么它平均随机了 10000 / 0.0001 = 100000000 次

2的28次方 = 268435456 九位数

假设 s = 0.0001 毫秒 ms,那么 1 毫秒能随机 10000 次,1秒能随机 10000000 次,100年能产生 31,536,000,000,000,000 次,17位数字

全世界按100亿人口算,10000000000 * 31,536,000,000,000,000 = 28位数字,一共就这么多次

2的64次方 = 20位数,如果遍历,能遍历10000000遍,如果有一个数字算碰撞成功,能碰撞10000000次,所以这个不安全

2的128次方 = 39位数,跟28数字相差11位,也就是100亿倍

如果有100亿个目标数字均匀分布在39位数内,即每隔该28位数字分配一个,那么用28位数字遍历可以遍历出一次

也就是说如果有100亿个目标是可碰撞的,那么全世界100年平均可以碰撞出一次,如果有10000亿个目标是可碰撞的,那么100次

所以综上所述,产生碰撞的可能性可以忽略不计,128位可以认为是安全的