我正在用C实现一个小应用程序,我希望以后以合理的价格出售它作为共享软件。它将开始为期30天的试用,我已经非常确定如何实施它。
我遇到的问题是,我不太确定如何实施产品密钥验证。我的想法是,客户可以在我的网页上注册(在尝试产品一段时间后),支付产品费用,并通过eaaabbbb-ccccc-ddddd-eeeee获取产品密钥邮件(或者可以通过我的网站上的个人资料获得)。到目前为止没问题。然后他/她将密钥放在我的应用程序中的相应关键字段中,并且 boom 该应用程序已注册。
从目前为止我可以收集到的信息,人们会为此推荐AES或RSA。说实话,我在大学的另一个方向(不是密码学)和我之前的一个密码学课程。但是从我记忆中来看,AES是一种对称加密算法,这意味着我只有一个加密和解密密钥,对吗?然后,我怎么能生成数以千计的产品密钥并仍然在我的应用程序中验证它们(顺便说一下,这不需要互联网访问....所以不用服务器检查)?
所以我猜RSA会走的路?但是RSA不会生成相当长的密钥(至少比上面要求的25个字符长)?
在another thread中,我读到某些产品甚至不会使用加密产品密钥生成/验证,而是只使用一些检查,例如“添加2.和17.字符,这应该总计为X”。
什么是最快,最简单,最安全的方式? :-)代码样本就是糖!
此致
塞巴斯蒂安
PS:哦......请不要告诉我我的钥匙能够在某些时候被破解.....我知道这一点,这主要是为什么我不想花很多钱这个问题的时间,但同时不会让偶尔的饼干太容易。答案 0 :(得分:30)
对称算法是有限的,因为任何带有反汇编程序的新手破解者都可以找到你的密钥(或用于生成密钥的算法)并制作“keygen”。
出于这个原因,非对称密码学是可行的方法。基本前提是这样的:
这当然是基本的想法。有关更多详细信息和源代码,请参阅Product Keys Based on Elliptic Curve Cryptography。
答案 1 :(得分:1)
答案 2 :(得分:0)
一个人在博客上写了他如何处理注册号码的问题。他的一篇博客文章是Generating Unique Registration Numbers。
答案 3 :(得分:0)
是的,RSA和AES是两个非常不同的东西:
由于您的应用不通过公共频道进行通信,并且加密的使用仅限于产品激活/注册,因此您需要使用对称密码。公钥密码的好处在于密钥管理,您将在您的网站上或通过电子邮件处理。
请注意,您不必为每个客户分配相同的密钥。您可以生成一些注册信息的哈希值,并将其与其他内容进行异或(也许是一个固定的会话密钥)。将其发送给客户,程序可以生成相同的哈希值,并且您发送的密钥将生成原始固定密钥的XOR。
处理密码术不是轻易做到的事情。正如你所提到的,你希望这会被破解。如果你自己做,这几乎肯定会发生。你仍然可以使用你自己的实现来“保持诚实的人诚实”,但你会意识到这是你所能得到的。如果您需要更强大的东西,那么在对解决方案进行彻底研究后,您应该购买解决方案。
答案 4 :(得分:0)
您可以查看此Code Project文章。它描述了基于执行软件的机器的MAC地址的软件密钥的实现。这个方法并不理想,正如导演自己承认的那样,它与你所寻找的有点不同,但也许它可以帮到你。