我必须在客户端PC上存储一个演示安装日期。应用程序演示期是在安装日期计算的。显然,用户无法编辑或删除此值。
如何做到这一点?
解决方案是连接到服务器并在那里验证它,但这意味着互联网连接是必需的,...,糟透了..
答案 0 :(得分:2)
您可以创建一个包含日期的简单文件,以及一些特定于机器的信息并对其进行签名。
规则是:如果文件存在且,则签名有效且环境正确且日期仍在未来,只有这样才能开始演示。
这可以防止更改文件或使用其他计算机上的文件。它没有涵盖问题,可能会改变系统日期......
关于您的疑虑 - 如果缺少许可证文件,软件将无法启动。并且用户无法创建许可文件,他将从您那里获得(您需要签名 - 使用只能验证签名是否正确)。您可以向他询问MAC地址,将地址添加到许可证文件中,以确保许可证文件不能在其他计算机上使用。
关于卸载 - 用户可以保留 - 在演示期结束后的第二天它将毫无价值。
答案 1 :(得分:2)
如果您想要满足“用户必须无法编辑或删除此值”的内容。而不能将它存储在用户的机器上。
因此,根据此要求,您只能选择将其存储在远程计算机上并通过某种网络连接进行访问。
实现目标的另一种可能的解决方案是使用非对称加密。在安装过程中,您需要从您自己的服务器请求签名签名(基于来自客户端计算机的识别信息,日期等),然后将其存储在客户端的计算机上并使用公钥解密。在这种情况下,您只需要在安装时连接互联网。
答案 2 :(得分:1)
我可能会选择以下两种可能之一:
将“仅限使用”日期硬编码到EXE中,以便EXE的所有副本在给定日期后停止工作。当然,您可能不得不每隔一段时间上传新的EXE,并附上新的日期。根据您的具体情况,这可能是一个很好的解决方案。
Andreas_D建议的一个变体:在安装时,创建一个二进制文件,其中包含大量膨胀和安装日期的非平凡方式。这很容易实现。普通用户永远不会使用十六进制编辑器更新此类文件中的日期(不会少于记事本,它会破坏文件,将其视为ANSI或UTF-8或...纯文本文件)。用户当然可以删除该文件,但是如果没有此文件,您的应用程序将无法启动,并且日期位于正确的范围内。
当然,对于系统范围的日期修改,这些方法中的任何一种都是安全的,但很少有用户希望以不正确的日期运行其主计算机。 (此外,许多应用程序无法使用错误的日期。)