如何生成软件许可证密钥?

许可证密钥是事实上的标准,可作为反盗版措施。坦白地说,这让我感到“通过隐秘获得安全性”,尽管我真的不知道如何生成许可证密钥。许可证密钥生成的一个好(安全)示例是什么?他们使用什么密码原语(如果有)?它是消息摘要吗?如果是这样,它们将对哪些数据进行哈希处理?开发人员采用什么方法使破解者难以构建自己的密钥生成器?密钥生成器是如何构成的?

BlueRaja-Danny Pflughoeft

对于老式CD密钥,只需要组成一种算法即可轻松生成和验证CD密钥(可以是任何字符串),但是有效CD密钥与无效CD的比率-keys太小,以至于随机猜测CD密钥不可能使您有效。

方式不正确:

《星际争霸》和《半条命》都使用相同的校验和,其中第13位数字验证了前12位数字。因此,您可以在前12位数字中输入任何内容,然后猜测第13位数字(只有10种可能性),从而臭名昭著。1234-56789-1234

验证算法是公共的,看起来像这样:

x = 3;
for(int i = 0; i < 12; i++)
{
    x += (2 * x) ^ digit[i];
}
lastDigit = x % 10;

正确的方法

Windows XP吸收了大量信息,对其进行加密,然后将字母/数字编码放在不干胶标签上。这样,MS既可以验证密钥,可以同时获得产品类型(家庭,专业等)。此外,它需要在线激活。
完整算法相当复杂,但是在德国出版的这篇论文(完全合法!)中很好地概述了算法

当然,无论您做什么,除非您提供在线服务(例如World of Warcraft),否则任何形式的版权保护都只是一个停顿:不幸的是,如果这是有价值的游戏,那么有人会破产(或者至少是规避) )的CD密钥算法以及所有其他版权保护。

真正正确的方法:

对于在线服务,生活要简单一些,因为即使使用二进制文件,您也需要通过其服务器进行身份验证才能使用它(例如,拥有一个WoW帐户)。例如,在购买游戏时间卡时使用的魔兽世界的CD密钥算法可能看起来像这样:

  1. 生成一个非常大的密码安全随机数。
  2. 将其存储在我们的数据库中并将其打印在卡上。

    然后,当有人输入播放卡号时,请检查该号码是否在数据库中,如果是,请将其与当前用户相关联,以使其永远无法使用。

对于在线服务,没有理由使用上述方案;使用其他任何东西都会导致问题

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章