我喜欢编码作为一种爱好,我不会自称为专业程序员。然而,我对这些有趣的函数在技术上如何工作非常感兴趣,以扩展我的思维。
任何提示、经验或书面算法都将不胜感激。
传统上,序列号就是连续的数字编号。因此,生产线上的第一个例子是 sn 0001,接下来是 0002,然后是 0003。我认为大多数人都能理解这个算法。
我想你实际上在询问产品密钥,它使用类似于公钥消息签名的机制——产品密钥是加密值,程序具有公钥,允许验证该密钥是否有效,但只有软件供应商拥有秘密密钥来“签署”产品密钥。维基百科上关于数字签名 的文章包含了一般机制;唯一的限制是,对于用户输入的密钥,它必须比 PGP 密钥要短得多。
如果你限制了非常短的序列号,那么它可能不足以存储典型签名机制的结果,在这种情况下,通常只需使用某些变体的校验和。它的缺点是易于反向工程-它的安全性在于算法是“秘密”的,而不是任何加密属性。每个产品都有自己的算法,它们通常很快就被破解了。
如果您有 5 个 5 个字符的块,则具有 36 ^ 25 种组合,这比 2 ^ 128 大,因此可以使用生成 128 位的标准数字签名算法,然后将该值转换为基本 36。
一个GUID(“全局唯一标识符”)可能是解决这个问题的简单方法:
http://en.wikipedia.org/wiki/Globally_Unique_Identifier
Guids包含16个字节,通常以十六进制数字序列的形式书写,例如:
3F2504E0-4F89-11D3-9A0C-0305E82C3301