java - 如何通过系统时钟篡改来防止使用过期的许可证?

标签 java licensing ntp systemtime

<分区>

我目前正在使用 java 开发许可管理器,我将为我的应用程序指定开始和结束日期,以便我可以强制许可用户在一定时间后重新许可该程序。

但我面临的问题是任何人都可以回滚他们的系统日期和时间以保持许可证的有效性。 Java 中有什么方法可以检测系统日期和时间是否已更改。我已经尝试使用网络时间协议(protocol)从时间服务器获取当前日期和时间。

最佳答案

您可能正在系统上存储许可证文件。 a) 包括软件在许可证文件中注册的时间,b) 对文件进行数字签名。

数字签名会告诉您许可证文件是否被篡改。如果没有,时间会告诉你软件是什么时候注册的;如果“当前时间”小于注册时间,您的许可证管理器就会知道发生了一些有趣的事情,并且可以做出相应的响应(拒绝运行,删除许可证,......

如果你真的想强制执行日期范围,将每个程序执行的当前时间写入一个单独的数字签名文件,验证时间总是单调上升。

您还可以根据您的应用程序先写后读的任何文件来检查您的上次记录时间。日期晚于您上次记录时间的此类文件表示某种许可文件回滚。

这些不会阻止用户将时钟调慢一些,但会让他很难以有组织的方式执行此操作。

关于java - 如何通过系统时钟篡改来防止使用过期的许可证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6328052/

相关文章:

Java 枚举类型名称反射

java - XSRFTokenUtility 中的 NPE - Google 移动后端启动器

open-source - 可以将任何现有的开源项目放入 github 中吗?

c - windows c 中的 sha-1 实现

java - 在 Hibernate 中将表映射到 XML 中的 MEMORY (HEAP)

java - C# 相当于 Java 的同步 (abc.class)

linux - 使用专有软件创建 Linux 发行版

NTP 和 GPS 源之间的时间精度

linux - 关于 linux 和 ntpd 如何处理时间的困惑