0

我在 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 个字符以上需要很长的时间)。

我从教程中获得了上面的增量函数,但我试图找出代码,以便它接受任何字符集输入。

任何提示或伪代码都是我所追求的。

4

0 回答 0