如何生成包含可解码产品信息的产品许可证密钥

时间:2017-01-17 21:11:06

标签: java security encryption

我想发布一个产品安全密钥,可以对许可限制的详细信息进行编码。例如,密钥可以包含最大数量的许可用户,和/或开始/结束日期以控制许可证到期。

我知道创建密钥的一种简单方法是使用MD5哈希 - 简单地连接细节并应用MD5哈希算法。但这是一个单向过程,即您无法解码密钥以查看初始参数。

我想要做的是发出一个可以在用户站点解码的密钥,并为他们提供所有许可参数。

所以用户会得到这样的东西:

1234-5678-9012-3456

使用由以下参数组成的字符串创建,连接,然后散列

最多用户: 50

开始日期: 17/01/17

结束日期: 17/01/18

过去我已经安装了带有许可证密钥的软件产品,并且密钥以某种方式具有内置的有效期等所有信息。这是如何完成的?软件是否通过咨询数据库与中央服务器联系以确定到期日期? 但是我确定这些许可证密钥在应用程序脱机时有效。我错了吗?

2 个答案:

答案 0 :(得分:0)

基本上你可以做的是:创建一个包含你的信息的数据结构,将其编码为字节,如果太大则通过压缩函数。

为您最喜欢的签名算法创建一个密钥对,如RSA

签署数据结构/压缩字节

将签名截断为拟合大小,如最后的X十六进制数字

将公钥与您的产品一起发送

签名部分越长,制作工作密钥的难度就越大

更有可能有人会替换你的二进制文件中的密钥或检查逻辑,但是......那就是你如何做到这一点...

答案 1 :(得分:0)

我为此开发了一个开源解决方案。

如果有人试一试,我会很高兴。 https://github.com/mitch-haraldsson/greenLicense

这正是您要找的,因为我对我的软件有同样的要求。

请记住,没有任何软件是不可破解的。一个足够坚定的攻击者会破解每个离线许可证。

我使用的是非常标准的方法。 密钥对(软件随附公开)用于加密许可证中的唯一对称密钥,该密钥可加密任何大小的有效负载。

签名确保文件未被篡改。

此外,您可以将许可证绑定到某些系统属性,例如

  • mac 地址
  • IP 地址
  • 主机名
  • 操作系统名称

当然,如前所述,坚定的攻击者几乎可以通过任何事情。目标不是让非法重新分发您的软件变得太容易。