Loops 动态更改循环迭代次数
我试图生成组合并验证给定的哈希。我用作Loops 动态更改循环迭代次数,loops,iteration,combinations,brute-force,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) {
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
也许有人能帮我写逻辑,这样就可以很容易地更改长度,而无需添加额外的for循环迭代。正如@TJ所建议的,递归可能是最直接的方法 JavaScript
只要调用
loop(l)
在所有长度的字符串上循环l
,就可以找到冲突。谢谢,我正在学习递归。我使用javascript实现它。我还添加了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);
}
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
}
}