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