我想根据这篇文章实现一个简单的许可系统。
一切正常。但现在我想添加一个到期日期,我不知道如何。
有人可以解释我如何添加到期日期吗?确切地知道如何实现并不重要,但我需要了解它背后的算法:)
最有用的方法是让服务器检查密钥是否仍然有效。这使得它很难伪造。
但是,如果您不想(出于某种原因)使用“在线”技术,那么您需要将到期日期存储在客户端使用的数据中的某个位置。它可以加密,但您的软件必须包含解密密钥。因为在某些时候,您的应用程序必须将当前日期与到期日期进行比较。
正如其他人所说,花费大量精力来使其难以破解很容易,但迟早会归结为一些简单的比较“它是否过时?”,并且该代码总是可以“坏了”通过更换if (!in_date) exit_with_message("License expired...");
ith if (false) ...
。所以,除非你在 100 多个不同的地方做那种事情,并且让代码在每个地方看起来都非常不同 [不要调用相同的函数,不要使用相同的消息,不要使用相同的计算,不要使用相同的结果等]
我想使用我们在家用机器上使用的编译器[在家中做一些与工作相关的项目!]。它内置了“演示许可证”,因此您可以尝试一下,但是在 10000 行源代码之后就停止了。所以我在二进制文件中查找了所有出现的 10000 。我认为有三个地方包含 10000。我更改了一个,尝试编译超过 10000 行的测试样本,但它仍然失败 - 将其改回并更改下一个:哇,它工作了......现在, coder 本来可以让它变得更加困难,但是如果我足够感兴趣,我相信我也可以解决这个问题。这比获得第二个许可证、在我的家用机器上安装许可证服务器等要容易得多。
还要记住,大多数破坏这种东西的人不是为了钱,而是为了挑战。如果很难,那只是更大的动力!
编辑:
我会做这样的事情:
1)创建一个license.dat,其中包含:
2) 加载软件时[或在您的软件中定期],加载 license.dat。
3) 验证许可证文件的哈希。
4) 检查当前日期是否大于到期日期。
5)如果检查一切正常,继续,否则退出一些相关消息。
我无法真正建议您如何存储/加密日期。一个选项是一个 64 位整数,该整数已根据 a time_t
(以秒为单位的时间)进行了适当的“加扰”。加密可能更像是“不要让它如此明显地表明它是时间戳”的情况 - 但哈希实际上是保护您的时间戳的原因。