Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何反转算法_Javascript - Fatal编程技术网

Javascript 如何反转算法

Javascript 如何反转算法,javascript,Javascript,我试图找到一种基于数学的方法来找到一个密码,使下面代码中的if语句为真。我曾经写过一些东西,这些东西可以让我找到答案,但这并不能帮助我理解如何用数学方法解决这个问题。使if语句为真所需的实际密码与此无关,而不是我所要求的密码。我特别想要一些代码,让我开始学习,甚至完成我可以学习的代码,告诉我如何使用JavaScript反向工程这个算法来获得答案 var passed = false; function checkPass(password) { var total = 0; va

我试图找到一种基于数学的方法来找到一个密码,使下面代码中的if语句为真。我曾经写过一些东西,这些东西可以让我找到答案,但这并不能帮助我理解如何用数学方法解决这个问题。使if语句为真所需的实际密码与此无关,而不是我所要求的密码。我特别想要一些代码,让我开始学习,甚至完成我可以学习的代码,告诉我如何使用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);
    }
}
var passed=false;
功能检查通行证(密码){
var合计=0;
var charlist=“abcdefghijklmnopqrstuvxyz”;
对于(变量i=0;i
看看函数根据其输入对
total
的实际作用:它乘以17,并将当前字符在字母表中的位置相加


因此,您的
expectedTotal
(例如248410397744610)将是一个可被17整除的数字加上密码最后一个字母的字母位置。使用
%
(模数运算符)查找所述位置(简单地说,您需要从
期望总数中减去的数字,使其可被17整除),然后除以17并重复。

看看函数根据其输入对
total
的实际作用:它乘以17并将当前字符在字母表中的位置相加


因此,您的
expectedTotal
(例如248410397744610)将是一个可被17整除的数字加上密码最后一个字母的字母位置。使用
%
(模数运算符)找到所述位置(简单地说,就是需要从
期望的总数
中减去的数字,使其可被17整除),然后除以17并重复。

下面是一个简单的代码片段,可以实现这一点:

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);
函数反向传递(n){
var all='ABCDEFGHIJKLMNOPQRSTUVXYZ',
out='',
抵消;
而(n>0){
偏移量=n%17;
out=所有字符(偏移量-1)+out;
n=(n-偏移量)/17;
}
返回;
}
函数createPass(密码){
var合计=0;
var charlist=“abcdefghijklmnopqrstuvxyz”;
对于(变量i=0;i
以下是一个简单的代码片段:

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);
函数反向传递(n){
var all='ABCDEFGHIJKLMNOPQRSTUVXYZ',
out='',
抵消;
而(n>0){
偏移量=n%17;
out=所有字符(偏移量-1)+out;
n=(n-偏移量)/17;
}
返回;
}
函数createPass(密码){
var合计=0;
var charlist=“abcdefghijklmnopqrstuvxyz”;
对于(变量i=0;i
看起来像是对应于
total==248410397744610
的密码是
gdclhpdhbied
。如果我的数学正确,应该有多个密码可以工作,500+。不过我对答案不感兴趣,我想写一个函数,让我得到答案,但我被困在如何反转算法上。@JohnStewart我刚刚告诉过你如何反转算法。我知道我正在处理它,因为我们说话的时候好像对应于
total==248410397744610
的密码是
gdclhpdhbied
。应该有多个密码如果我的数学正确的话,那就行了,500+以上。不过我对答案不感兴趣,我想写一个函数,让我得到答案,但我一直在思考如何反转算法。@约翰斯特瓦特我刚刚告诉过你如何反转算法。我知道我正在处理这个问题,因为我们正在讨论这个问题。你需要生成一些密码来完成函数调用,对吗?是的,它所做的只是获取数字并给你原始密码。还要注意,这只能在字符为
的情况下工作,这与我之前写的非常相似。我试图用一种随机尝试不同字母组合的方式来做,但这花了我很长时间。它确实得出了和你在这里发布的相同的结果,还有502个额外的结果。无论如何,谢谢你对我的“家庭作业”的帮助。有了这个,你需要生成一些密码来完成函数调用,对吗?是的,它所做的只是获取数字并给你原始密码。还要注意,这只能在字符为
的情况下工作。这与我已经编写的非常类似。我试着用一种不同字母组合的方式来做这件事