指定while条件会导致程序没有返回任何内容

时间:2016-10-22 14:24:40

标签: java if-statement hash while-loop brute-force

我目前正在研究一种强力密码破解方法,因为我想尝试一下并做一些新的事情。我正在提供下面我正在研究的方法,但这是我要做的第一件事。最初,我正在生成密码的可能值的哈希值,并将其与我的“sample.txt”文件中的密码进行比较,该文件包含散列密码列表。所以基本上我的目标是从该外部文件读取散列密码值,并将其与所有可能的3/4哈希密码值进行比较。

当我运行该程序时,我意外地将“BruteForce”方法中while语句的条件保持为true并且无休止地运行,但是当我设置条件以保持生成的密码值为3时只有4,程序突然终止我不知道为什么,我已经尝试调试程序,看看出了什么问题,但我无法推断出任何东西。

这是我的主要方法和“强力”方法中的内容:

public TestClass(char[] characterSet, int guessLength) {
    cs = characterSet;
    cg = new char[guessLength];
    Arrays.fill(cg, cs[0]);
}

public static void bruteForce(String username, String hashed_pw) {

      //username is the username from the input
      //hashed_pw is the hashed value of password
    String chars = "0123456789abcdefghijklmnopqrstuvwxyz";
    char[] charset = chars.toCharArray();

    TestClass bf = new TestClass(charset, 1); //random generation of possible pw value

    String attempt = bf.toString();

    while ((attempt.length() == 3) || (attempt.length() == 4)) {

        String hashed_input = doHash(attempt); //hash the possible pw value

        System.out.println("");
        System.out.println("Attempt result is: " + attempt);
        System.out.println("Hashed of attempt: " + hashed_input);
        System.out.println("Hashed Password is : " + hashed_pw);
        System.out.println("");

        if (hashed_input.equals(hashed_pw)) {
            System.out.println("Password Found: " + attempt);
            System.out.println(username + "'s password is: " + attempt);
            break;
        } else {
            attempt = bf.toString();
            bf.increment();
        }
        // attempt = bf.toString();
        // System.out.println("" + attempt);
        //  bf.increment();
        // return attempt;

    }
    // return attempt;
}

public char[] cs; 
public char[] cg; 


public void increment() {
    int index = cg.length - 1;
    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;
        }
    }
}

  @Override
 public String toString() {
    return String.valueOf(cg);
}

使用bruteForce(s [0],s [1])运行代码时,它不提供任何输出,只提供BUILD SUCCESSFUL消息。

s[0]  is the username of the user I'm trying to deduce their password
s[1] is the hashed password I read from an external file 

我将s [1]值与bruteForce方法中的hashed_input值进行比较,条件是我的用户可能生成的密码长度只有3或4个字符

1 个答案:

答案 0 :(得分:1)

TestClass bf = new TestClass(charset, 3);

将解决你的问题。