我想创建一个许可密钥,你会推荐哪种密码算法?
基本上输入是:
公司名称
主要版本号
创建日期
到期日期
有特色1:
有特色2:
有feature3:
e.g。 Acme Inc 5.0 20081102 20081102 0 1 0
相关:Which built-in .NET cryptography algorithm is the most secure?
答案 0 :(得分:10)
我建议:不要花太多时间来保护你的钥匙。 使用字节编译语言,反编译非常容易,只需使应用程序跳过验证步骤即可。无论您的密钥有多安全,当您的验证功能始终返回true时,它们都无关紧要。串行密钥是为了让诚实的人诚实。
答案 1 :(得分:7)
如果您在客户端进行验证,则需要使用非对称加密。这样您就不必将私钥分发给客户。我会使用SHA-256和2048位密钥生成RSA签名。如果这样做,加密操作将不是弱链接。当然,破解者可以更改代码以跳过验证步骤,但是加密算法不会对此有所帮助。
如果您正在验证服务器端,我会选择基于SHA-256的HMAC。
答案 2 :(得分:3)
对于许可证密钥,您对加密它并不感兴趣,而是对其进行签名。通过签名,您可以验证到期日期和启用的功能列表未被篡改。无需隐藏(加密)许可证密钥,因为您不希望通过从最终用户隐藏许可证来减轻威胁。
加密签名是通过散列许可证然后使用私钥加密散列来完成的。由于任何人都可以使用相应的公钥解密该哈希,因此任何人都可以验证许可证是否被篡改。
用于签名和验证的基本CryptoAPI函数是CryptSignHash和CryptVerifySignature,请参阅Example C Program: Signing a Hash and Verifying the Hash Signature。
.Net Framework等效项是RSAPKCS1SignatureFormatter和RSAPKCS1SignatureDeformatter类。
答案 3 :(得分:1)
答案 4 :(得分:1)
你需要做4件事:
否1:校验和您的应用程序(MD5,具有自定义md5上下文)
- 需要对MD5上下文进行加密初始化
- 再次比较私钥/公钥加密校验和
否2:校验和正在运行的应用程序的文本段
否3:对许可证使用4096位RSA私钥加密
否4:加密任何关键字符串,如“错误密钥”或“密钥正确”
答案 5 :(得分:0)
如果您想查看Triple DES加密的示例,可以查看加密数据库中数据的my blog post。
博客文章包含视频和源代码。
虽然它侧重于加密数据库中的字符串列,但您可以修改它以使用许可字段。
源代码是用C#编写的,并使用Triple DES算法。