我用Java编写了一款桌面会计软件。我想要添加一个密钥、许可证或其他安全措施,以防止客户重新分发该软件。
我只是想知道如何着手处理这个问题?
我用Java编写了一款桌面会计软件。我想要添加一个密钥、许可证或其他安全措施,以防止客户重新分发该软件。
我只是想知道如何着手处理这个问题?
首先,让我们把商业/GPL战争从SO中剔除,然后真正回答OP的问题...
我在一家销售保护Java软件的公司工作。我们的软件很好。它实际上非常卓越,完全超过了竞争对手的产品。如果用户不满意我们的保护方案,他们可以选择使用我们竞争对手生产的劣质产品。
问题是:我们正在向一个越来越网络化的世界转变。我们的软件需要一个Internet连接才能正确地工作某些功能(软件可以在没有Internet连接的情况下启动,但不是所有功能都能正常工作)。
一个正确设计的服务器/客户端保护方案,在服务器端进行足够的处理,无法被盗版。在某一点上,重新编写软件比尝试复制服务器端发生的事情更容易。
你可以这样想:没有人能够成功使用盗版或密钥生成的许可证玩真正的“魔兽世界”服务器(有假服务器,但那是错过了重点的:在流氓服务器上玩游戏的人不在真实经济中玩游戏,这是一个巨大的失败)。
或者这样说:没有人盗版过GMail。 GMail真的很棒:它可能是我使用最多的应用程序(在我的IDE之后)。 当然,它是免费的...但是几乎所有的事情都发生在服务器端,所以没有人能够克隆它。
在某些软件领域,使用限制性副本保护非常普遍:过去是硬件加密狗,现在大多数是服务器/客户端方案。例如,有很多非常好的、非常昂贵的软件正在使用“Flex许可证管理器”,其中包括能够打败任何免费(或便宜)编译器的昂贵的C++编译器,一些公司非常乐意为此支付巨额资金,并且很高兴拥有购买这样的软件的能力(他们不介意需要互联网连接进行许可验证)。
因此,回答您的问题:
我想添加一个密钥或许可证或其他安全措施,以防止客户端重新分发软件。 我只想知道该怎么做?
通过实施客户端/服务器密钥验证来解决这个问题。理想情况下,让桌面软件的一部分计算在服务器端进行:这会让盗版者头疼(他们要么必须盗用您的服务器,要么必须复制服务器所做的事情,没有其他方法)。
这是我对类似问题提出的一个+7赞成票的答案,其中提供了更多细节:
许多人被Java的快速性和不需要极客技能编码的特点所吸引。但我认为你不能成功地对使用Java制作的应用程序进行数字版权管理。为了从这个错误中恢复过来,从现在开始使用C/C++进行编码。