用于许可证密钥的.NET加密?

时间:2008-11-03 15:31:13

标签: .net encryption cryptography

我想创建一个许可密钥,你会推荐哪种密码算法?

基本上输入是:

  

公司名称
  主要版本号
  创建日期
  到期日期
  有特色1:
  有特色2:
  有feature3:

e.g。 Acme Inc 5.0 20081102 20081102 0 1 0

相关:Which built-in .NET cryptography algorithm is the most secure?

6 个答案:

答案 0 :(得分:10)

我建议:不要花太多时间来保护你的钥匙。 使用字节编译语言,反编译非常容易,只需使应用程序跳过验证步骤即可。无论您的密钥有多安全,当您的验证功能始终返回true时,它们都无关紧要。串行密钥是为了让诚实的人诚实。

答案 1 :(得分:7)

如果您在客户端进行验证,则需要使用非对称加密。这样您就不必将私钥分发给客户。我会使用SHA-256和2048位密钥生成RSA签名。如果这样做,加密操作将不是弱链接。当然,破解者可以更改代码以跳过验证步骤,但是加密算法不会对此有所帮助。

如果您正在验证服务器端,我会选择基于SHA-256的HMAC。

答案 2 :(得分:3)

对于许可证密钥,您对加密它并不感兴趣,而是对其进行签名。通过签名,您可以验证到期日期和启用的功能列表未被篡改。无需隐藏(加密)许可证密钥,因为您不希望通过从最终用户隐藏许可证来减轻威胁。

加密签名是通过散列许可证然后使用私钥加密散列来完成的。由于任何人都可以使用相应的公钥解密该哈希,因此任何人都可以验证许可证是否被篡改。

用于签名和验证的基本CryptoAPI函数是CryptSignHashCryptVerifySignature,请参阅Example C Program: Signing a Hash and Verifying the Hash Signature

.Net Framework等效项是RSAPKCS1SignatureFormatterRSAPKCS1SignatureDeformatter类。

答案 3 :(得分:1)

您的其他问题的答案也适用于此:Which built-in .NET cryptography algorithm is the most secure?

答案 4 :(得分:1)

你需要做4件事:
否1:校验和您的应用程序(MD5,具有自定义md5上下文)
       - 需要对MD5上下文进行加密初始化        - 再次比较私钥/公钥加密校验和
否2:校验和正在运行的应用程序的文本段
否3:对许可证使用4096位RSA私钥加密 否4:加密任何关键字符串,如“错误密钥”或“密钥正确”

答案 5 :(得分:0)

如果您想查看Triple DES加密的示例,可以查看加密数据库中数据的my blog post

博客文章包含视频和源代码。

虽然它侧重于加密数据库中的字符串列,但您可以修改它以使用许可字段。

源代码是用C#编写的,并使用Triple DES算法。