C 产品密钥的实现

C 产品密钥的实现,c,encryption,licensing,key,product,C,Encryption,Licensing,Key,Product,我正在用C实现一个小应用程序,我希望以后能以合理的价格将其作为共享软件出售。它将以30天的试用期开始,我已经非常确定如何实施它 但是,我的问题是,我不太确定如何实现产品密钥验证。我的想法是,客户可以在我的网页上注册(试用产品一段时间后),为产品付费,并通过电子邮件(或者通过我网站上的个人资料)获得AAAA-bbbbb-ccccc-ddddd-EEE形式的产品密钥。到目前为止没有问题。然后,他/她将密钥放入我的应用程序中相应的密钥字段,然后应用程序注册 从我目前收集到的信息来看,人们要么推荐AES

我正在用C实现一个小应用程序,我希望以后能以合理的价格将其作为共享软件出售。它将以30天的试用期开始,我已经非常确定如何实施它

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

从我目前收集到的信息来看,人们要么推荐AES,要么推荐RSA。老实说,我在大学里学的是另一个方向(不是密码学),我上的密码学课是很久以前的事了。但据我所知,AES是一种对称加密算法,这意味着我只有一个密钥进行加密和解密,对吗?然后我如何生成数千个产品密钥并在我的应用程序中验证它们(顺便说一句,它不需要访问互联网……因此不需要与服务器进行核对)

所以我想RSA会是一条路吗?但是RSA不产生很长的密钥(至少比上面要求的25个字符长)吗

在本文中,我读到一些产品甚至不使用加密来生成/验证产品密钥,而是使用一些检查,如“添加2.和17.字符,这应该加在x上”

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

问候,

塞巴斯蒂安


附言:哦……请不要告诉我我的钥匙怎么会在某个时候被破解……我知道这一点,这主要是为什么我不想花太多时间处理这个问题,但同时也不想让偶尔的破解变得太容易。

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


Kagi允许您收取款项,并帮助您管理钥匙。

一个家伙在博客上讲述了他如何处理注册号码问题。他的一篇博文是。

是的,RSA和AES是两个截然不同的东西:

  • RSA是一种公钥加密技术,包括公钥和私钥,速度相当慢。主要用途是建立对称加密会话密钥的安全交换
  • AES是对称加密,它是快速和安全的
由于您的应用程序不通过公共渠道进行通信,并且密码的使用仅限于产品激活/注册,因此您需要使用对称密码。公钥密码的好处在于密钥管理,您将在网站上或通过电子邮件处理密钥管理

请注意,您不必为每个客户分发相同的密钥。您可以生成一些注册信息的散列,并将其与其他信息(可能是固定会话密钥)异或。将它发送给客户,程序可以生成相同的散列,XOR将生成您发送的密钥,以生成原始的固定密钥


处理密码学不是一件容易的事情。正如你所提到的,你希望这会被破解。如果你自己做,这几乎肯定会发生。您仍然可以使用自己的实现来“保持诚实的人诚实”,但要意识到这是您所能做到的。如果您需要更强的解决方案,那么您应该在对解决方案进行彻底研究后购买解决方案。

您可以查看本文。它描述了基于执行软件的机器的MAC地址的软件密钥的实现。正如导演自己承认的那样,这种方法并不理想,它与你所寻找的有点不同,但也许它可以帮助你

对称算法是有限的,因为任何具有反汇编程序的初学者都可以找到您的密钥(或用于生成密钥的算法)并生成“密钥生成器”

因此,非对称密码学是一条出路。基本前提如下:

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

当然,这只是基本的想法。有关更多详细信息和源代码,请参阅。

不,抱歉,不提供选项。该应用程序的估计价格为4.99欧元,对于该价格范围内的产品,Kagi的费用太高。最有趣的是,Kagi已经不存在了。非常感谢您提供的信息。假设由于某种原因我不能使用EEC……RSA不会使用25个字符的密钥方法,因为RSA密钥的最小长度为1024位,对吗?我在这里看到了ECC的免费实现:。我还没有检查它有多好。稍微挖掘一下肯定会发现其他的。这里有一个非常便宜的方法:。就像用户可以通过反汇编程序找到对称密钥一样,他们可以修补您的二进制文件以替换用于验证许可证信息的公钥(使用他们自己生成的密钥对中的公钥)。随便用