3

我有一个编译为 a 的 java 程序.jar,它需要启用激活密钥。我希望第一次jar提示您输入激活密钥runtime,一旦激活,存储一个字符串,稍后可以读取该字符串runtimes以确定它是否已启用。

关于如何解决这个问题的任何建议?

注意:我希望将字符串秘密存储,以免有人欺骗程序认为它已启用。

更新:我一直在玩弄偏好 api,如果程序已启用,我正在使用此代码进行存储:

String key = "userKey";
String saveString = "enabled";
Preferences root = Preferences.userRoot();
root.put(key, saveString);

这是在以后的运行时得到的:

String key = "userKey";
String failedtoLoad="Program not enabled";
Preferences root = Preferences.userRoot();
String status=root.get(key, failedToLoad);

每次我运行程序状态最终都是 failedtoLoad 并且找不到 saveString ,除非我保存字符串并在同一运行时获取字符串。为什么是这样?

4

2 回答 2

1

查看 Java 首选项 API ( http://docs.oracle.com/javase/8/docs/technotes/guides/preferences/index.html )。它允许在程序执行之间存储首选项和配置数据。

关于保密:正如JDong已经提到的,如果你的程序必须能够阅读它,很可能其他人也可以阅读它,这最终只是你想让他们有多难的问题。最好是有一些字符串,您的程序可以通过算法验证来确定它是否是有效的密钥。在这种情况下,其他人仍然可以搜索已安装的密钥并在其他地方重复使用,但这就像第一个人将密钥传递给其他用户一样。

于 2015-02-08T20:14:32.433 回答
0

如果你真的想要安全,你必须在混淆方面比任何潜在的攻击者在逆向工程方面更努力。如果您想知道如何在代码级别实现安全性,请查看成功的 DRM 的实现。这些通常涉及验证密钥的某些服务器在代码中进行多次非显而易见的检查。

我更喜欢的另一种选择是让用户同意一些限制其使用的法律术语。

于 2015-02-08T20:36:50.473 回答