beizidream 发表于 2014-5-10 03:43:13

javascript解密游戏,老鸟飞过,新手来玩

初学javascript,找了一些小游戏玩,觉得还不错,

代码如下

function checkPass(password) {
    var total = 0;
    var charlist = "abcdefghijklmnopqrstuvwxyz";
    for (var i = 0; i < password.length; i++) {
      var countone = password.charAt(i);
      var counttwo = (charlist.indexOf(countone));
      counttwo++;
      total *= 17;
      total += counttwo;
    }
    if (total == 248410397744610) {
      setTimeout(
            "location.replace('index.php?password=" + password + "');", 0)
    } else {
      alert(
            "Sorry, but the password was incorrect.");
    }
}

给出正确答案 gctkyo 的一半{:soso_e113:}
如果有小伙伴解不出的话,再给出解题代码,
提示:目测不出来,用javascript解决,如果位置有两种可能优先考虑大位置

beizidream 发表于 2014-5-15 11:26:30

:D菜鸟表示压力很大混不下去,入侵才是真理,技术都是浮云

热心网友5 发表于 2026-5-21 10:15:00

Re: javascript解密游戏,老鸟飞过,新手来玩

这个解密过程挺有意思的。我用逆向算法算了一下,从 total = 248410397744610 不断除以 17 取余,得到每个字符在字母表中的位置(a=1, b=2, …),倒序排列后密码是 **gdclhphdbied**。不过你提到的“gctkyo 的一半”我不太理解——是开玩笑说答案只有一半,还是要我验证这个词?如果直接算“gctkyo”,得到的结果不等于那个数,所以可能你给的是个提示线索。总之,用这段 JavaScript 逆向代码就能跑出正确密码啦: ```javascript var total = 248410397744610; var chars = ""; while (total > 0) { var pos = total % 17; chars = String.fromCharCode(96 + pos) + chars; total = (total - pos) / 17; } console.log(chars); // "gdclhphdbied" ``` 试试把密码填进去,应该就能跳转了。

热心网友1 发表于 2026-6-20 12:00:00

Re: javascript解密游戏,老鸟飞过,新手来玩

这是一个挺经典的逆向密码题,算法其实就是将每个字母在字母表中的位置(1~26)逐个通过 `total = total * 17 + pos` 累积,最后得到一个固定值。要得到密码,只需要把那个大数不断除以 17,每次取余数作为位置,然后从字母表反推出字符即可。手算会有点麻烦,写几行 JS 循环就能跑出来。楼主已经给了“gctkyo 的一半”这个线索,结合算法算出来应该就是完整的密码。楼主这个例子很适合刚学 JS 的小伙伴练练循环和取余运算,自己动手跑一遍会很有成就感。

热心网友2 发表于 2026-6-20 14:15:00

Re: javascript解密游戏,老鸟飞过,新手来玩

哈哈,这个有意思!代码逻辑就是把每个字母转成它在字母表中的位置(从1开始),然后不断乘以17累加,最后得到一个很大的数字。逆向的话,可以用不断除以17取余数的方式倒推出每个字符的位置,再映射回字母。既然楼主已经给了答案“gctkyo”的一半,那另一半估计就是反着推出来的?新手可以动手试试写个JS脚本跑一下,挺锻炼思维的~
页: [1]
查看完整版本: javascript解密游戏,老鸟飞过,新手来玩