我正在尝试找到一种基于数学的方法来查找使下面代码中的if语句为true的密码。我已经写了一些粗略的答案,但这并没有帮助我理解如何以数学方式解决这个问题。我需要使if语句为true的实际密码是无关紧要的,而不是我要求的。我特别想要一些代码来启动我甚至完成我可以学习的代码,向我展示如何使用JavaScript对这个算法进行反向工程以获得答案。
var passed = false;
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) {
passed = true;
alert(password);
}
}
答案 0 :(得分:3)
这是一个简单的代码片段:
function invertPass(n) {
var all = 'abcdefghijklmnopqrstuvwxyz',
out = '',
offset;
while (n > 0) {
offset = n % 17;
out = all.charAt(offset - 1) + out;
n = (n - offset) / 17;
}
return out;
}
function createPass(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;
}
return total;
}
var orig = 'gdclhpdhbied',
num = createPass(orig);
console.log(invertPass(num) === orig);
答案 1 :(得分:0)
看看函数对total
的实际作用取决于它的输入:它乘以17并在字母表中添加当前字符的位置。
因此,expectedTotal
(例如248410397744610)将是一个可被17整除的数字加上密码最后一个字母的字母位置。使用%
(模数运算符)查找所述位置(简单地说,你需要从expectedTotal
中减去它以使其可被17整除),然后除以17并重复。