在 XML 中生成带有内置到期日期的简单许可证 - 我这样做对吗?

Posted

技术标签:

【中文标题】在 XML 中生成带有内置到期日期的简单许可证 - 我这样做对吗?【英文标题】:Generating simple licences with built-in expiration dates in XML - am I doing this right? 【发布时间】:2012-02-07 13:35:03 【问题描述】:

我目前正在开发简单的应用程序(如果相关,在 Actionsript 3 中),我想构建一个基于 XML 文件(将由 php 脚本生成)的简单注册系统,这将使我的文件能够在某个日期后“过期”。

对我来说,这个系统看起来不错,但我希望专家提供意见,以防我遗漏了一些明显的东西 - 或者我完全搞错了。

根据我在 *** 和其他网站上阅读的内容,我想出了以下 XML 结构:

<LICENSE>
     <NAME>Joe Cool</NAME>
     <COMPANY>Doggy Dogdog</COMPANY>
     <APP>Flash Tester</APP>
     <VERSION>1.02</VERSION>
     <EXPIRES>01/10/2012</EXPIRES>
     <SERIAL>e923b5e370cd3cb7ac72c1482d088bd7</SERIAL>
</LICENSE>

字段实际上是构成许可证的所有项目的简单 MD5 哈希,并添加了“盐”(这是保密的),以防止用户生成自己的 MD5 哈希。 “解密”的许可证如下所示:

Joe Cool - Doggy Dogdog - Flash Tester - 1.02 - salt - 01/10/2012

运行时,我的应用程序将加载 XML 数据,添加“盐”并从中计算 MD5。 然后它将生成的 MD5 散列与存储在 XML 中的散列进行比较。不匹配的散列表示篡改 XML 文件。并且从 XML 中加载的日期可以与当前日期进行比较,以确保应用程序没有过期。

我知道 MD5 不是那么安全,等等,但我并没有用它来保护核筒仓,所以我愿意以安全性换取速度和简单性。我尝试在几个在线MD5反向查找中反向从源字符串获得的MD5,但到目前为止都失败了。

最后,我知道我必须将“盐”存储在应用程序中的某个位置,但我猜任何人真正决心对它进行逆向工程都会破坏我将实施的任何系统,所以我可以接受这个想法。

【问题讨论】:

【参考方案1】:

简单地更改计算机时钟以永远使用它不是微不足道的吗?

正如你提到的,反编译文件、找到 salt 并生成任意许可证文件也很容易。

但是任何像这样的系统都将是一种“默默无闻的安全”类型的交易,所以除非你想将你的逻辑存储在服务器端,否则这几乎是安全的 :)

编辑:我认为打破验证的另一种方法是,如果这是一个 .swf 文件,则将其加载到另一个 swf 文件中,该文件已包含您在其中使用的 md5 类,但已修改,因此它总是返回一个已知值(比如“1”),然后更改 xml 中的许可证密钥以匹配此值。

【讨论】:

感谢您的回答。为了解决日期问题,我总是可以使用 .swf 来使用互联网检查日期,但我相信这些应用程序可以在没有连接的情况下离线使用不能仅仅依靠这个,那么是的,这仍然是一种可能性。我从没想过.swf中的.swf问题,但我认为standalone将主要是AIR文件。

以上是关于在 XML 中生成带有内置到期日期的简单许可证 - 我这样做对吗?的主要内容,如果未能解决你的问题,请参考以下文章

sql 获取SQL Server许可证到期日期

在 PHP 中生成 XML 文档(转义字符)

在熊猫中生成给定范围内的随机日期

在 Maven 中生成带有依赖项和测试的 jar 文件

如何在 azure 存储 blob 中生成许可下载链接

如何在未绑定的 xml 结构中生成逗号分隔的字符串