可定制的Java应用程序理念

时间:2009-11-03 02:04:51

标签: java customization

所以我正在开发一个Java应用程序,并且客户已经要求能够具有可以解锁的功能,以便根据客户想要支付的内容来定制应用程序。所以我试图提出这样做​​的想法,以提供一定程度的安全性,但也提供一般的可维护性和可读性。

我一直在做一些搜索,并有一些我自己的想法,维护一个加密的配置文件,可能存储在一个jar文件中,我可以在运行时卸载,重新打包和加载。

想看看是否有其他人对你如何做到这一点有任何有趣的想法。到目前为止,我一直在谷歌上看一些没有取得很大成功。

哦,最后一点需要注意的是,这个java应用程序所使用的机器可能没有可用的互联网。因此,运行许可证服务器似乎不是一个可行的选择

6 个答案:

答案 0 :(得分:3)

我建议使用某种依赖注入或运行时编织方面,因此您可以包含具有正确xml文件或新功能配置文件的新jar文件。

我同意coobird,包含它们并锁定它们本身就有风险,因为有人最终会反编译您的应用程序并确定如何获得所有功能。

答案 1 :(得分:1)

防止对软件中“锁定”的功能进行“未经授权的访问”的唯一可靠方法是不提供用户不希望用户首先访问的代码。

通过使用密码,加密解锁来启用额外的功能(密钥将在哪里?在程序本身?),配置文件通常可以被决定获取他们想要执行的代码的人击败。

如果锁定的代码已经在二进制文件中分发,那么至少使用软件进行解锁就很可能会失败。我认为似乎有点安全的一种方式是硬件密钥加密狗,或者具有存储在硬件上的重要代码,但没有多少人喜欢这样的想法插入一块硬件来使用该软件。

当它真正归结为它时,代码本身没有只被某些软件标志禁用的功能。

答案 2 :(得分:0)

我建议您与客户建立信任关系。或者捆绑USB key dongle,但即使这些也不是100%。

如果您要分发软件,任何类型的加密都必须能够自行解密。您实际上是在向客户提供锁和钥匙。

答案 3 :(得分:0)

您可以实现核心产品,然后将其他功能作为插件。您可以将每个插件放在一个单独的jar文件中。然后,客户可以分发包含核心应用程序和所购插件的捆绑包。因此,未购买的功能不在任何二进制文件中。

答案 4 :(得分:0)

分发全套。让他们打电话给你解锁各种功能的钥匙。 (使用简单的加密方案,使密钥长度合理,并可通过电话传送。)

答案 5 :(得分:0)

我编写了一个基于Java的许可证管理器,名为Padlock,可满足您的需求(http://www.javalicensemanager.com)。具体来说,它使用基于文件的许可证,这些许可证使用RSA进行加密签名。公钥嵌入到您的代码中,私钥仍然是您的秘密。它非常安全,唯一已知的攻击方法是代码分解。

许可证支持无限制的功能键,因此您可以在许可证中指定任意数量的功能,并使用代码根据许可证文件中的功能键触发功能。如果最终用户想要启用新功能,他只需要一个启用了此功能的新许可证文件。启动时,您的应用程序将根据需要读取许可证文件并解锁功能。

Padlock中的值是它使用许可证处理痛苦的区域:您调用的许可证验证例程确保文件未被修改(完整性),由您签名(真实性),以及当前日期在许可证日期参数(开始日期,到期日期)内。公开测试版的最新版本(2.0)也支持硬件锁定许可证(通过MAC地址)。

Padlock网站包含使用和集成指南,请随时访问网站并发送电子邮件给我任何问题。

谢谢, 杰森