首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >产品密钥的实现

产品密钥的实现
EN

Stack Overflow用户
提问于 2009-03-14 15:24:26
回答 5查看 10.1K关注 0票数 23

我正在用C实现一个小应用程序,我想以后以合理的价格将它作为共享软件出售。它将以30天的试验开始,我已经很确定如何实现它。

不过,我遇到的问题是,我不太确定如何实现产品密钥验证。我想的是,客户可以在我的网页上注册(在试用了一段时间后),支付产品费用,并通过电子邮件(或者可以通过他的个人资料在我的网站上获得)以aaaaa-bbbbb ccccc-ddddd的形式获得产品密钥。到目前为止没问题。然后,他/她会在我的应用程序中适当的键字段中删除密钥,然后将应用程序注册。

据我所知,人们要么推荐AES,要么推荐RSA。老实说,我在大学的另一个方向(不是密码学)和我上的一门密码课是一段时间前的事。但据我所知,AES是一种对称加密算法,这意味着我只有一个密钥用于加密和解密,对吗?那么,我如何生成数千个产品密钥,然后仍然在我的应用程序中验证它们(顺便说一句,它不需要互联网access....so,也不需要在服务器上检查)?

所以我想RSA是该走的路了?但是RSA不产生相当长的密钥(至少比上面要求的25个字符长)吗?

另一个线程中,我看到有些产品甚至不会在产品密钥生成/验证中使用加密,而只是使用一些检查,比如“添加2.和17.字符,这应该是x”。

在这里,最快、最简单、最安全的方法是什么?:-)代码示例将是糖!

致以敬意,

塞巴斯蒂安

P.S.:Oh...and,请不要告诉我,我的钥匙在某一时刻是如何被破解的.我知道这一点,这就是为什么我不想花很多时间在这个问题上,但同时也不要让偶尔的问题变得太容易。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-03-14 19:19:41

对称算法是有限的,因为任何具有反汇编程序的新手都可以找到您的密钥(或生成密钥的算法)并生成一个"keygen“。

正因为如此,非对称密码学才是可行的。基本前提是这样的:

  • 当用户向您购买许可证时,您将收集有关用户和/或其环境的某些标识细节(通常,这只是一个全名;有时公司也是)。
  • 您可以对此信息进行128位MD5散列。
  • 使用128位椭圆曲线密码,使用服务器上的私钥加密此散列.
  • 128位密码文本可以表示为一个由字母和数字组成的25个字符字符串(加上用于可读性的分隔破折号)。注意,26个字母+ 10位数=36个离散值,而36^25 > 2^128。
  • 用户将此产品密钥键入到注册对话框中。客户端软件将其转换回128位数字(16字节),解密使用您的EC密码的公钥,并将结果与用户个人信息的MD5哈希进行比较,该散列必须与注册所用的内容相匹配。

当然,这只是基本的想法。有关详细信息和源代码,请参见基于椭圆曲线密码学的乘积密钥

票数 35
EN

Stack Overflow用户

发布于 2009-03-14 15:41:05

如果你只是购买一个解决方案,生活就会更简单。

http://www.kagi.com/kagisolutions/index.php

Kagi允许您收集付款,他们帮助您管理钥匙。

票数 0
EN

Stack Overflow用户

发布于 2009-03-14 15:54:41

一个家伙在博客上写了他如何处理注册号码的问题。他的博客条目之一是生成唯一的注册号码

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

https://stackoverflow.com/questions/646086

复制
相关文章

相似问题

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