我应该将许可证密钥输出从纯MD5输出更改为常见的“ xxxx-yyyy-zzzz”类型代码?

StackOverflow https://stackoverflow.com/questions/4666262

我正在创建一个简单的许可密钥系统,以“保持诚实的人诚实”。我不在乎特别严格的密码学。

如果他们对演示限制感到恼火,他们会访问我的注册网站,付款并给我他们的电子邮件。我给他们一个许可证密钥。

我要让事情非常简单,所以:

license_key = md5(email + "Salt_String");

我的PHP和C#函数运行相同的算法并获得相同的密钥。

问题是这些功能的输出是一个32个字符的字符串,例如:

A69761CF99316358D04771C5ECFCCDC5

这可能很难记住/输入。是的,我知道复制/粘贴,但我想让所有付费客户解锁该软件确实很容易。

我应该以某种方式将这个长字符串转换为较短的东西吗?

假设我只使用前6位数字,所以: A69761

显然有更多的加密碰撞,但是在实际使用中,这一点是否重要?

还有其他想法使事物更具人性化/可以易读吗?

有帮助吗?

解决方案

左6-10个符号就足够了 - 无论如何用户将无法猜测代码,并且很容易键入。也是好主意,是在服务器上注册每个许可证,以便您能够检查该用户真的很诚实,并且没有给他人的许可证键。

其他提示

根据我的经验,要求用户键入或复制/粘贴30个字符的代码确实会导致沮丧的客户。并不是说这很困难。这只是人们不在乎的障碍。

我使用的解决方案 我的事 是进行单独的试用并购买的下载。要获取其许可副本,客户在其电子邮件地址中类型和下载表上的简短用户ID。仅输入电子邮件会自动重新发送用户ID。您没有问这个问题,但是一个系统可以自动查找客户所需的任何代码比拥有简单系统更重要的代码。下载系统在数据库中查找用户的详细信息,并为已嵌入用户许可证的setupSomeProductCustomerName.exe提供。此设置安装客户的许可副本,而无需任何进一步的标识或服务器连接。

该系统对我们来说非常好。客户只有一个文件可以备份,并且不会丢失序列号,以确保他们将来可以重新安装该软件。

也就是说,如果您更喜欢使用单向哈希使用系统,只需使用生成较小哈希的算法即可。例如,CRC-32产生8个十六进制数字。

哈希在密码上没有意义。饼干将简单地浏览您的代码,复制整个代码块,将电子邮件地址变为许可证密钥,然后将其粘贴到其密钥内。然后,他们可以为任何电子邮件地址生成许可键。无论您的哈希算法有多复杂,他们都可以做到这一点。

如果要防止这种情况,则需要使用公共密钥加密,这会导致钥匙太长,无法输入。单独的密钥文件,或使用上面描述的个性化下载系统。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top