我有如下创建一个Serial关键的应用程序:
Take customername
Sign customername using privatekey and sha/dsa algorithm
然后许可证可以通过公共密钥解码,并检查cuastomername匹配检查
这只是生成的序列是相当长的工作好。 因此,它是不是真的实用的客户在输入序列密钥,而不是他们必须提供一个串行在一个文件中,这是相当不同的如何雾的应用程序和工作,是混乱的。
许多其他应用程序只是提供一个GUID的用户,当他们做出购买
即5bd1060b-8608-4817-93ca-207f7c828e2f
并且,用户必须输入他们的电子邮件地址和GUID授权他们的应用程序。
这看起来像用户一个整洁的解决方案,但我不明白,怎么这样的应用程序从一个无效的GUID证实是有效的GUID,除非其做了所有通过在线的数据库上检查EMAILADDRESS / GUID对。 但我真的想某种验证,而不需要,否则网上支票来完成:
一>应用程序将无法正常工作,如果互联网连接/我的服务器停机或b>,他们可以通过禁用网络连接规避检查
编辑:
我的理解解决方案,提出如下的回答:
用户购买使
就拿EMAILADDRESS +盐
加密与SHA1给160bit的散列
转换为16进制给出20个进制值,即40个字符
最后8个字符的罗布泊给一个GUID
他们进入程序程序的电子邮件用户GUI和电子邮件地址采取的电子邮件地址,加入盐,加密ectera和检查生成有效的GUID验证此配对。
我的这个主要问题是,我需要的盐存放在某处的程序,因此,如果黑客发现的盐和使用的是哪种即时通讯做,他们可以创建任何电子邮件地址有效的许可证密钥生成器。
我现在对其他程序的方法:
我已生成的公钥/私钥对
用户购买使
我通过签署EMAILADDRESS生成许可证
BaseEncode生成的许可证
发送许可用户
计划通过basedecoding并用公钥解密验证许可证
我的问题一直是当我签署EMAILADDRESS太长所以我最终把它在一个文件,而不是进入它变成一个领域的用户,但也许问题在于我base64encoding而不是转换为十六进制。
多久可以签署的输出是,它依赖于输入的长度,或者是总是一样的吗?
因为我解密用公共密钥的密钥我canot罗布泊的许可证密钥的一些字符,但如果生成密钥只有40个字符,我想这是好的
我觉得这个方法的优点是即使黑客的作品出来我是如何做的事情,他们不能创建一个许可证发电机,因为他们不这样做,并不能得到私钥,因为它仅存储在我的服务器上。 他们只能生成许可证,如果他们创造了一个新的公/私钥配对,然后如果我的应用程序必须在自身编码后的公钥的应用程序可以反正拒绝许可。
当然,他们可以破解应用程序,但如果应用程序定期更新,这将成为很多努力。
因此,在总结:我有正确理解这一点,哪种方法是最好的,以及有多少数据第二种方法产生。