我在 Java 中制作了一个蛮力破解程序,您提供一个散列 (SHA1) 密码,它会遍历给定的字符集,直到找到正确的密码。
我的第一个字符集包括:
"0123456789abcdefghijklmnopqrstuvwxyz"
第二个字符集:
"9876543210zyxwvutsrqponmlkjihgfedcba"
第一个字符集就像一个梦一样工作,但是一旦我更改字符集顺序的任何部分,它就会导致程序崩溃并抱怨索引越界。我确定这与增量方法有关,但我不确定如何调整它以满足我需要能够遍历多个字符集的需求。
任何建议将不胜感激,这里有一些示例代码可以为您提供一个想法:
char[] charsetA = "0123456789abcdefghijklmnopqrstuvwxyz".toCharArray();
char[] charsetB = "9876543210zyxwvutsrqponmlkjihgfedcba".toCharArray();
charset = charsetA; // charsetA works but not charsetB
BruteForce bf = new BruteForce(hashPassword, charset, 1);
String attempt = bf.toString();
attempt = pd.calcSha1(attempt);
while (true) {
if (attempt.equals(hashPassword)) {
System.out.println("Password Found!");
System.out.println("Password as plaintext : " + currentGuess);
break;
}
attempt = bf.toString();
currentGuess = attempt;
attempt = pd.calcSha1(attempt);
bf.increment();
}
}
private char[] cs; // Character Set
private char[] cg; // Current Guess
String hashPassword; // Password searching for
public BruteForce(String password, char[] characterSet, int guessLength) {
hashPassword = password;
cs = characterSet;
cg = new char[guessLength];
Arrays.fill(cg, cs[0]);
}
public void increment() {
int index = cg.length - 1;
//System.out.println("index = " + index);
while (index >= 0) {
if (cg[index] == cs[cs.length - 1]) {
if (index == 0) {
cg = new char[cg.length + 1];
Arrays.fill(cg, cs[0]);
break;
} else {
cg[index] = cs[0];
index--;
}
} else {
cg[index] = cs[Arrays.binarySearch(cs, cg[index]) + 1];
break;
}
}
}
编辑:
我试图遍历字符集中的每个字符,直到它到达可能字符的末尾,当它到达时,我想添加另一个字符并循环遍历这两个字符组合的所有可能性,依此类推,直到它用尽所有可能性最多 6 个字符(7 个字符以上需要很长的时间)。
我从教程中获得了上面的增量函数,但我试图找出代码,以便它接受任何字符集输入。
任何提示或伪代码都是我所追求的。