首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >出于好奇:序列号是如何生成的?提示,算法?

出于好奇:序列号是如何生成的?提示,算法?
EN

Stack Overflow用户
提问于 2009-04-03 19:08:49
回答 6查看 36.9K关注 0票数 42

我想知道序列号生成器和验证器是如何工作的。我的目标是生成一个只由数字和字母组成的五部分序列号。

我喜欢编程作为一种爱好,并不认为自己是一个专业的程序员。然而,我对这些有趣的函数如何在技术上开阔我的视野非常感兴趣。

任何提示,经验或书面算法是值得赞赏的。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2009-04-03 19:44:15

Brandon StaggsImplementing a Partial Serial Number Verification System上写了一篇很好的文章。这些示例是用Delphi编写的,但也可以转换为其他语言。

票数 25
EN

Stack Overflow用户

发布于 2009-04-03 19:18:55

传统上序列号是序列号..。数字。生产线上的第一个例子是sn 0001,下一个是0002,下一个是0003。我认为大多数人都能解决这个算法。

我认为你实际上是在问产品密钥,它使用类似于公钥消息签名的机制--产品密钥是加密值,程序有一个允许它验证密钥是否有效的公钥,但只有软件供应商拥有‘签名’产品密钥的秘密密钥。维基百科上关于digital signatures的文章有一般的机制;唯一的条件是用户输入的密钥必须比PGP密钥短得多。

如果您被限制为一个非常短的序列号,那么它不太可能大到足以存储典型签名机制的结果,在这种情况下,通常只对其使用某种变体的校验和。这有一个缺点是易于反向工程-它的安全性是因为算法是“秘密”的,而不是由于任何密码属性。每个产品都有自己的算法,它们通常很快就会被破解。

如果您有5个5个字符的块,则有36^25个组合,大于2^128,因此可以使用生成128位的标准数字签名算法之一,然后将该值转换为基数36。

票数 16
EN

Stack Overflow用户

发布于 2009-04-03 19:25:15

给自己买个public/private key pair。生成sequence numbers (10000,20000,30000,40000,....)其具有一些识别特征(例如,可被10000整除)。使用您的私钥加密该数字。使用一些人类可读的系统(base 3264)对该值进行编码,并将这些值分成组,以便人们更容易解析。在您的应用程序的每一次销售中分发编码序列号。

在应用程序的某个地方,你隐藏了公钥。当用户输入编码的序列号时,首先将其解码回二进制。使用公钥将其解密。检查它是否可以被10000整除。

困难的部分在于实现-将公钥隐藏在应用程序中,这样它就不容易被替换。选择一些您可以轻松识别但不会用完值的序列。Obfuscating这个应用程序,这样别人就不能轻易跳过整个检查。等等。

票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/715251

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档