我正在用C实现一个小应用程序,我希望以后以合理的价格出售它作为共享软件.它将开始为期30天的试用,我已经非常确定如何实施它.
但问题是,我不太确定如何实施产品密钥验证.我的想法是,客户可以在我的网页上注册(在尝试产品一段时间后),支付产品费用,并通过eaaabbbb-ccccc-ddddd-eeeee获取产品密钥邮件(或者可以通过我的网站上的个人资料获得).到目前为止没问题.他/她,然后滴在我的应用程序在适当的重点领域关键和繁荣的应用程序被注册.
从目前为止我可以收集的内容来看,人们要么推荐AES或RSA.说实话,我在大学的另一个方向(不是密码学)和我之前的一个密码学课程.但是从我记忆中来看,AES是一种对称加密算法,这意味着我只有一个加密和解密密钥,对吗?我怎么能生成数以千计的产品密钥,仍然在我的应用程序中验证它们(顺便说一下,不需要互联网访问......所以不用服务器检查)?
所以我想RSA会是要走的路?但RSA是否会生成相当长的密钥(至少比上面所需的25个字符长)?
在另一个线程中,我读到有些产品甚至不会使用加密产品密钥生成/验证,而只是采用一些检查,如"添加2.和17.字符,应该总计为x".
什么是最快,最简单,最安全的方式?:-)代码样本将是糖!
问候,
塞巴斯蒂安
PS:哦......请不要告诉我我的钥匙能在某个时刻被破解.....我知道这一点,这主要是为什么我不想花很多时间与这个问题,但同时也不会让偶尔的饼干太容易.
对称算法是有限的,因为任何带有反汇编程序的新手破解者都可以找到你的密钥(或用于生成密钥的算法)并制作"keygen".
出于这个原因,非对称密码学是要走的路.基本前提是这样的:
当用户从您那里购买许可证时,您会收集有关用户和/或其环境的某些识别详细信息(通常,这只是一个全名;有时也是一个公司).
您对此信息进行128位MD5哈希.
使用128位椭圆曲线加密,使用服务器上的私钥加密此哈希.
128位密文可以作为25个字符的字符串表示给用户,该字符串由字母和数字组成(加上分隔符号以便于阅读).请注意,26个字母+10个数字= 36个离散值,而36 ^ 25> 2 ^ 128.
用户在注册对话框中键入此产品密钥.客户端软件将其转换回128位数字(16字节),使用EC加密的公钥对其进行解密,并将结果与用户个人信息的MD5哈希值进行比较,该哈希值必须与用于注册的内容相匹配.
当然,这只是基本的想法.有关更多详细信息和源代码,请参阅基于椭圆曲线加密的产品密钥.