14

我想创建一个许可证密钥,您会推荐哪种加密算法?

基本上输入将是:

公司名称
主要版本号
创建
日期 过期日期
有特征1:
有特征2:
有特征3:

例如 Acme Inc 5.0 20081102 20081102 0 1 0

相关:哪种内置 .NET 加密算法最安全?

4

6 回答 6

11

我会建议:不要花太多时间来保护您的密钥。使用字节编译语言很容易反编译,只需让应用程序跳过验证步骤。无论您的密钥有多安全,当您的验证函数始终返回 true 时,它​​们都无关紧要。序列号的存在是为了让诚实的人保持诚实。

于 2008-11-04T13:18:13.217 回答
7

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

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

于 2008-11-03T18:11:16.917 回答
3

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

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

用于签名和验证的基本 CryptoAPI 函数是CryptSignHashCryptVerifySignature,请参阅示例 C 程序:签名哈希和验证哈希签名

.Net Framework 等效项是RSAPKCS1SignatureFormatterRSAPKCS1SignatureDeformatter类。

于 2010-02-23T08:18:14.807 回答
1

您的其他问题的答案在这里也很合适:哪种内置 .NET 加密算法最安全?

于 2008-11-03T15:43:50.613 回答
1

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

于 2010-02-23T08:00:04.737 回答
0

如果您想查看三重 DES 加密的示例,可以查看我关于加密数据库中的数据的 博客文章。

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

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

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

于 2008-11-07T14:14:10.077 回答