动态更改循环迭代次数

时间:2014-08-13 06:26:04

标签: loops iteration combinations brute-force

我正在尝试生成组合并验证给定的哈希值。我用作

的伪代码
for i= 'a' to 'z'
{
    for j= 'a' to 'z'
    {
        for k= 'a' to 'z'
        {
            for l= 'a' to 'z'
            {
                hashStr = MD5(i+j+k+l);
                if(hashStr = targetHash)
                {
                    print "Match Found"
                    Exit
                }

            }
        }
    }
}

使用上面的伪代码,我可以生成固定长度为4的组合

aaaa
aaab
aaac
...
zzzz

Possilby可能有人帮助编写逻辑,这样就可以轻松地改变长度,而无需为循环添加额外的迭代。

1 个答案:

答案 0 :(得分:2)

正如@TJ所建议的那样,递归可能是最直接的方法。

的JavaScript

var chars = 'abcdefghijklmnopqrstuvwxyz';

function loop(prefix, length) {
    if (length > 0) {
        for (var i = 0; i < chars.length; i++) {
            loop(prefix + chars.charAt(i), length - 1);
        }
    } else if (length == 0) {
        var hashStr = prefix;
        // ......
        // Your logic goes here         
        // ......
    } else {
        // length should always be non-negative
    }
}

function theLoop(length) {
    loop('', length);
}

只需致电theLoop(l)即可遍历所有长度为l的字符串,以便找到冲突。


Java代码

void loop(int length) {
    loop("", length);
}

void loop(String prefix, int length) {
    if (length > 0) {
        for (char i = 'a'; i <= 'z'; i++) {
            loop(prefix + i, length - 1);     // concatenate prefix with char (i)
        }
    } else if (length == 0) {
        String hashStr = prefix;
        // ......
        // Your logic goes here         
        // ......
    } else {
        // length should always be non-negative
    }
}

只需致电loop(l)即可遍历所有长度为l的字符串,以便找到冲突。