我正在开发一个OpenSource .NET许可引擎。该引擎使用硬件id (硬盘序列号)作为锁,并CRC16此值以获得缩短标识符。
示例值为MAXTOR ST3100、476300 is 和CRC16结果为3FF0。
我关心的是两个不同的值是否经常得到相同的CRC16值,还是应该使用CRC32呢?
发布于 2011-08-12 02:19:37
2项碰撞概率=1⁄0x10000 =0.00152%。
但是如果你有两个以上的项目,请看生日问题 --它会变得更有可能:
你只需要300件物品就可以得到50%的碰撞概率。
http://www.texify.com/img/%5CLARGE%5C%21%5CLARGE%5C%21%5Cleft%281%20-%20%5Cfrac%7B0%7D%7B2%5E%7B16%7D%7D%5Cright%29%5Cleft%281%20-%20%5Cfrac%7B1%7D%7B2%5E%7B16%7D%7D%5Cright%29%5Cleft%281%20-%20%5Cfrac%7B2%7D%7B2%5E%7B16%7D%7D%5Cright%29%5Cleft%281%20-%20%5Cfrac%7B3%7D%7B2%5E%7B16%7D%7D%5Cright%29%5Ccdots%5Cleft%281%20-%20%5Cfrac%7BN%7D%7B2%5E%7B16%7D%7D%5Cright%29%3D%2050%25%20%5C%5C%20N%20%5Capprox%20300.gif
发布于 2011-08-12 02:19:47
由于CRC16是一个16位的值,我想说的是,这个概率大约是65536的1。
发布于 2011-08-12 02:25:56
没有散列方法生成唯一的值,冲突在某一点上得到保证。根据您的需求,最接近的赌注就是按原样使用硬盘序列号。
不过,黑客很容易破解它。
https://stackoverflow.com/questions/7034974
复制相似问题