我正在开发一个开源 .NET 许可引擎。该引擎使用硬件ID(硬盘序列号)作为锁和CRC16这个值来获得缩短标识符。
示例值为MAXTOR ST3100、476300BE和 CRC16 结果为3FF0
我担心的是 2 个不同的值多久获得相同的 CRC16 值,或者我应该使用 CRC32 代替吗?
我正在开发一个开源 .NET 许可引擎。该引擎使用硬件ID(硬盘序列号)作为锁和CRC16这个值来获得缩短标识符。
示例值为MAXTOR ST3100、476300BE和 CRC16 结果为3FF0
我担心的是 2 个不同的值多久获得相同的 CRC16 值,或者我应该使用 CRC32 代替吗?
2 个项目之间的碰撞概率 = 1 ⁄ 0x10000 = 0.00152%...
但是,如果您有超过 2 个项目,请参阅生日问题- 它的可能性更大:
您只需要 300 个项目即可获得 50% 的碰撞概率。
由于 CRC16 是一个 16 位值,我会说机会大约是 65536 中的 1。
没有散列方法生成唯一值,在某些时候可以保证冲突。根据您的要求,最接近的选择就是按原样使用硬盘序列号。
不过,黑客很容易破解它。