Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 关于基本软件许可实施的想法_Java_Security_Licensing - Fatal编程技术网

Java 关于基本软件许可实施的想法

Java 关于基本软件许可实施的想法,java,security,licensing,Java,Security,Licensing,我正试图决定如何为我编写的一些软件实现一个非常基本的许可解决方案。该软件将在我(假设的)客户机上运行,如果客户机在n台以上的机器上运行(n是他们购买的许可证数量),则该软件将立即退出(带有友好消息)。此外,客户不懂技术,以至于“基本”就足够了 这是我目前的设计,但考虑到我在这方面几乎没有经验,我想在开始开发之前问一下: 远程服务器托管一个MySQL数据库,其中一个表包含两列:客户机密钥和许可证数量 客户端应用程序在启动时连接到MySQL数据库,提供它的客户端密钥,我已将其放入打包到分发版中的属

我正试图决定如何为我编写的一些软件实现一个非常基本的许可解决方案。该软件将在我(假设的)客户机上运行,如果客户机在n台以上的机器上运行(n是他们购买的许可证数量),则该软件将立即退出(带有友好消息)。此外,客户不懂技术,以至于“基本”就足够了

这是我目前的设计,但考虑到我在这方面几乎没有经验,我想在开始开发之前问一下:

  • 远程服务器托管一个MySQL数据库,其中一个表包含两列:客户机密钥和许可证数量
  • 客户端应用程序在启动时连接到MySQL数据库,提供它的客户端密钥,我已将其放入打包到分发版中的属性文件中(我将为每个新客户端创建一个新分发版)
  • 很可能,我需要第二个表来存储验证历史记录,这样,通过一些简短的逻辑,软件可以决定是否可以在给定的机器上运行(可能是每24小时使用软件的n台机器的滑动窗口)
  • 如果软件无法建立到MySQL数据库的连接,或者决定它每天超过n台允许的机器,它将关闭
  • 托管MySQL数据库的远程服务器的连接信息应该硬编码到应用程序中吗?(这听起来是个坏主意,但除此之外,他们可能会将其指向其他“始终验证成功”服务器)
我想这大概涵盖了我最初的设计。其目的是,虽然它肯定不是完全证明,但我认为我已经使创建一个易于共享的破解解决方案变得有些困难。此外,我可以轻松地调整给定客户端/密钥对的许可证数量


我想这已经做了一百万次了,所以请告诉我一个更好的解决方案,它的实现同样简单,并提供相同(低)的安全性。如果使用外部库,我更喜欢Java,因为软件就是用Java编写的。

我认为这可能不值得这么麻烦。客户可能不是那么精通技术,但如果值得,他们会绕过它,如果不值得,他们无论如何也不会使用你的软件

您不讨论配置过程-如何知道哪台机器包含MySQL数据库。您不会讨论如果MySQL数据库崩溃会发生什么

坦率地说,第一次出现问题时,他们可能会发现,要么他们不太喜欢这个软件,无法继续使用它,要么他们会想出如何绕过这个系统。即使最终用户不懂技术,他们也可能会有内部技术支持


我不会在这件事上浪费你的时间。如果您想要许可证管理系统,请使用专业的许可证管理系统。否则,请以信任和合理的法律条款为基础。

我认为这可能不值得费心。客户可能不是那么精通技术,但如果值得,他们会绕过它,如果不值得,他们无论如何也不会使用你的软件

您不讨论配置过程-如何知道哪台机器包含MySQL数据库。您不会讨论如果MySQL数据库崩溃会发生什么

坦率地说,第一次出现问题时,他们可能会发现,要么他们不太喜欢这个软件,无法继续使用它,要么他们会想出如何绕过这个系统。即使最终用户不懂技术,他们也可能会有内部技术支持


我不会在这件事上浪费你的时间。如果您想要许可证管理系统,请使用专业的许可证管理系统。否则,请遵循信托和合理的法律条款。

我建议不要实施此类计划。如果您的客户机出现连接问题,或者您的MySQL数据库出现故障,该怎么办。你最终会遇到一些恼怒的客户

但是,如果您打算实施该计划,这里有一些建议:

  • 不要将密钥按顺序设置,或者生成随机密钥,或者执行类似于E(K,H(clientID+licenseID))的操作,其中E是加密函数,K是某个密钥,H是散列函数

  • 如果您担心将应用程序指向某个validate always服务器,那么您假设他们足够精通技术。那么,是什么阻止他们使用出站路由器上的IPTABLES或更改其/etc/hosts文件将所有到服务器的连接重新路由到同一个仅验证服务器呢。硬编码静态IP假定您的服务器永远不会移动。如果您决定更换ISP怎么办。此外,即使您没有ISP,有时也会出于各种原因对其网络重新编号

  • 为了避免#2中所述的问题,您必须实施某种挑战响应系统。客户端将随机字符串与许可证数据一起发送到服务器,并使用一些已知密钥对其进行加密或散列。最好使用公钥方案

  • 如果您的服务器实际为您的程序执行某些计算,则这些方案通常有效。选择不经常执行的内容,这样服务器就不会陷入困境。此外,它必须是非平凡的东西,所以cracker不会只在假服务器中实现它。当然,它必须是一些基本的东西,没有这些东西,你的程序就不能正常运行


  • 我建议不要实施这些计划。如果您的客户机出现连接问题,或者您的MySQL数据库出现故障,该怎么办。你最终会遇到一些恼怒的客户

    但是,如果您打算实施该计划,这里有一些建议:

  • 不要让你的钥匙顺序,要么生成随机钥匙,要么做点什么