这是一个 Android(通过 Cordova/Phonegap)游戏项目。我的目标是能够提供一个“促销代码”,让任何人都可以免费解锁游戏,但我想限制每个代码只能工作一天,我不想依赖服务器端组件验证代码。我想出的解决方案是每天的代码是(前一天的代码+一个秘密值)的 md5 哈希的前几个字母。这是在js中:
function checkPromoCode(codeToCheck) {
var secretString = "ABCDEFGH";
var startDate = new Date(1388534400000); // Jan 1 2014
var currentDate = new Date();
var todaysCode = "";
while (startDate < currentDate) {
todaysCode = md5(todaysCode + secretString).substring(0,6);
startDate.setDate(startDate.getDate() + 1);
}
if (codeToCheck == todaysCode) return true;
return false;
}
我认为攻击者(谁知道我正在使用的算法并知道前几天的代码)确定今天的代码的唯一合理方法是通过计算 secretString 的值,我是否正确?我知道一个坚定的攻击者可以通过暴力破解或分析 apk 来计算 secretString 的值。没有什么是牢不可破的;这里的目标只是让它变得相当困难。我错过了什么明显的东西吗?MD5 是一个合适的哈希值吗?