我正在尝试生成组合并验证给定的哈希值。我用作
的伪代码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可能有人帮助编写逻辑,这样就可以轻松地改变长度,而无需为循环添加额外的迭代。
答案 0 :(得分:2)
正如@TJ所建议的那样,递归可能是最直接的方法。
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
的字符串,以便找到冲突。
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
的字符串,以便找到冲突。