我正在开发一个OpenSource .NET许可引擎。 此引擎使用硬件ID (硬盘序列号)作为锁定, CRC16 此值以缩短标识符。
示例值 MAXTOR ST3100,476300BE 且CRC16结果 3FF0
我担心的是2个不同的值经常获得相同的CRC16值,或者我应该使用CRC32代替?
答案 0 :(得分:6)
2项之间的碰撞概率= 1 / 0x10000 = 0.00152%......
但如果您有两件以上的商品,请参阅Birthday Problem - 它更有可能获得批次:
你只需要300件物品就可以获得50%的碰撞概率。
答案 1 :(得分:2)
由于CRC16是一个16位值,我可以说65536中的机会大约为1。
答案 2 :(得分:0)
没有散列方法会生成唯一值,在某些时候可以保证碰撞。根据您的要求,最接近的赌注就是按原样使用硬盘序列号。
黑客会轻易破解它。