我的暴力密码生成器(Java)出错

时间:2014-04-23 20:52:18

标签: java encryption brute-force

这是一个课程作业,基本上是一个可以猜测"密码然后将其发送到另一个将解密文件的类。我完成了很多困难。

import sussex.edu.Cryptography;

public class Final {

    public static void main(String[] args) throws Exception{
        //decrypter();
        Cryptography crypto = new Cryptography();

        String encrypted = "SourceFile_encrypted.txt";
        String decrypted = "SourceFile_decrypted.txt";
        String password = new String();

        crypto.setPassword(password);
        if(crypto.isPasswordValid()){
            System.out.println("Found password:" + password);
            crypto.decryptFile(encrypted, decrypted);
        }
        else{
            //Keep trying...
        }
    }
    public static String decrypter(){
        char array[] = new char[5];
        Cryptography crypto = new Cryptography();
        String password = new String();

        for (char c0 = 'A'; c0 <= 'Z'; c0++) {
            array[0] = c0;
            for (char c1 = 'A'; c1 <= 'Z'; c1++) {
                array[1] = c1;
                for (char c2 = 'A'; c2 <= 'Z'; c2++) {
                    array[2] = c2;
                    for (char c3 = 'A'; c3 <= 'Z'; c3++) {
                        array[3] = c3;
                        for (char c4 = 'A'; c4 <= 'Z'; c4++){
                            array[4] = c4;
                            String s = new String(array);
                            password = s;
                            System.out.println(password);
                            crypto.setPassword(password);
                            if(crypto.isPasswordValid()){
                                break;
                            }
                        }
                    }
                }
            }
        }
        return password;
    }
}

它遍历所有可能的密码,并超过实际密码(OLLEH)并且什么都不做。当我手动输入密码到第一个crypto.setPassword(密码)时;它工作得很好。 当我输入它时,它看起来像crypto.setPassword(&#34; OLLEH&#34;); 但如果我手动输入&#34; OLLEH&#34;进入crypto.setPassword(密码);在嵌套的for循环中,它不起作用。所以我的错误在那里,我无法看到它。

1 个答案:

答案 0 :(得分:2)

你的isPasswordValid()方法可能正在将字符串与==而不是equals()进行比较。

这可以解释为什么当这个比较与“OLLEH”相反时返回true,但是当它与具有相同值的String相对时返回false,但是使用new创建。

尝试用password = s;替换password = s.intern ();