通过许可证或密钥保护Java应用程序

Ahm*_*ani 10 java security licensing

我想创建一个仅在具有密钥或许可证的计算机上运行的桌面应用程序.如何实现这一目标?

wil*_*ill 24

这完全取决于你想要的安全性......

Java的问题是您可以反向编译它.因此,如果有人想要,他们可以下载您的软件,反向编译它,然后删除您已经安装的任何安全性(然后根据需要重新分发它).

如果你计划进入大众市场并出售它并且盗版实际上是一个问题,这只是一个问题.

如果您不关心这一点,那么您可以选择在线或离线检查.

我合作的公司使用在线方法; 有几个步骤:

编辑:我已经改变了它的工作方式,因为旧的方式是维护噩梦.

  1. 许可证文件
    • (这可以包含你想要的任何东西,它必须是每个用户唯一的.大多数人通常使用普通服装;
    • name
    • company
    • email
    • 然后一个key.即JDU8-AJS9-88DF-SASF-ASF9你经常看到的那种东西.
  2. 该程序从许可证文件生成哈希.
    1. 将许可证文件中的所有数据放入字符串中
    2. 将字符串传递给散列函数,此页面可以向您显示.
  3. 让程序在线检查(在您的服务器上).数据在HTML请求中编码(post/get/json /您想要的任何内容)并提交到许可证验证页面,然后验证数据.数据中包含随机生成的字符串,验证页面使用该字符串生成另一个密码.然后将其返回给程序,该程序还使用随机字符串生成自己的密码.如果两者匹配,则程序启动.

要生成密钥,只需使用相同的散列函数,然后将散列值上传到您的服务器.

如果你想让它离线,你可以在我猜的代码中包含哈希值并在那里检查它们.

但是,我应该指出,我不是一个安全专家,我只是为一家公司开发博士学位.这就是我做到的.

编辑:此图片可能会有所帮助:

在此输入图像描述

第二编辑:

我现在已经在此过程中包含了"离线验证".它不是真正的离线验证,它只是将用户用作代理 - 他们需要以另一种方式访问​​互联网.

它的工作原理如下:

  1. 未找到互联网连接:为用户提供4位数代码
  2. 用户进入离线验证页面(也针对移动设备进行了优化)
  3. 用户从下拉列表中选择他们使用的软件
  4. 用户输入用户名(此字段记住条目)
  5. 用户输入程序提供给他们的代码并提交
  6. 网页提供一个4位数的代码,然后输入程序,然后启动.
  7. 程序在许可文件中添加了一些特殊数据,这意味着不需要在下周/月/多长时间内重复此过程.

每次程序成功验证在线时,它还会在许可文件中添加一个离线访问密码,这意味着它可以抵御临时的互联网停机时间,并且只有在互联网停机超过一周/月/无论多长时间后才会停止工作开始工作.

  • @TomasBisciak如果你让jsut返回一个布尔值,那么人们很容易只编辑他们的主机文件(至少在Windows上)并且运行小的服务器总是返回true.让它返回从您发送的随机密钥生成的某种特定密码.即你发送的数据,包括一个随机字符串,然后哈希它并发回哈希.然后检查哈希匹配. (2认同)