我目前正在开发简单的应用程序(如果相关,在 Actionsript 3 中),我想构建一个基于 XML 文件(将由 PHP 脚本生成)的简单注册系统,这将使我的文件“过期”在某个日期之后。
对我来说,这个系统看起来不错,但我希望专家的意见,以防我遗漏了一些明显的东西——或者我完全错了。
根据我在 stackoverflow 和其他网站上阅读的内容,我提出了以下 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>
<SERIAL> 字段实际上是构成许可证的所有项目的简单 MD5 散列,并添加了“盐”(这是保密的),以防止用户生成自己的 MD5 散列。“解密”许可证如下所示:
Joe Cool - Doggy Dogdog - Flash Tester - 1.02 - salt - 01/10/2012
运行时,我的应用程序将加载 XML 数据,添加“盐”并从中计算 MD5。然后它将生成的 MD5 散列与存储在 XML 中的散列进行比较。不匹配的散列表示篡改 XML 文件。并且可以将来自 XML 的加载日期与当前日期进行比较,以确保应用程序没有过期。
我知道 MD5 不是那么安全,等等,但我并没有用它来保护核筒仓,所以我愿意以安全性换取速度和简单性。我试图在几个在线 MD5 反向查找中反转从源字符串获得的 MD5,但到目前为止它们都失败了。
最后,我知道我必须将“盐”存储在应用程序的某个地方,但我想任何人真正决心对它进行逆向工程都会破坏我无论如何都会安装的任何系统,所以我可以忍受主意。