【问题标题】:Password finder (something like bruteforce) Java密码查找器(类似于蛮力)Java
【发布时间】:2015-10-04 23:58:23
【问题描述】:

我的代码有问题。 该程序正在查找每个包含 1 个字母和 3 个字母的密码。 2个字母的密码程序只能找到密码“11”。 同样的方式,5个字母只找到“11111”。 使用 4/6 个字母的程序找不到任何密码。

带有很多“如果”的代码对混乱感到抱歉,但这是我正在考虑创建密码查找器的唯一方法。(该程序是用于练习的个人项目)

package passwordfind10num;
import java.util.Scanner;

public class Passwordfind10num {

    public static void main(String[] args) {
        char[] charArray = { '1', '2', '3', '4', '5', '6', '7', '8', '9', '0',
            'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'g', 'k', 'l',
            'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
            'y', 'z', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'G',
            'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V',
            'W', 'X', 'Y', 'Z', '!', '@', '#', '$', '%', '^', '&', '*',
            '(', ')', '_', '-', '+', '=', '\\', '|', ',', '<', '>', '/',
            '?', '~' }; 

        Scanner in = new Scanner(System.in);

        System.out.println("Enter a password");
        String password = in.next();

        String found = "";
        int array = -1;
        int array2 = -1;
        int array3 = -1;
        int array4 = -1;
        int array5 = -1;
        int array6 = -1;

        while (!found.equals(password)) {
            if (array5 == 83) {
                array6++;
                array5 = 0;
                array4 = 0;
                array3 = 0;
                array2 = 0;
                array = 0;
                found = String.valueOf(charArray[array6] + charArray[array5]
                        + charArray[array4] + charArray[array3])
                        + String.valueOf(charArray[array2])
                        + String.valueOf(charArray[array]);
            } else if (array4 == 83) {
                array5++;
                array4 = 0;
                array3 = 0;
                array2 = 0;
                array = 0;
                if (array6 == -1)
                    found = String.valueOf(charArray[array5]
                            + charArray[array4] + charArray[array3])
                            + String.valueOf(charArray[array2])
                            + String.valueOf(charArray[array]);
                else
                    found = String.valueOf(charArray[array6]
                            + charArray[array5] + charArray[array4]
                            + charArray[array3])
                            + String.valueOf(charArray[array2])
                            + String.valueOf(charArray[array]);

            } else if (array3 == 83) {
                array4++;
                array3 = 0;
                array2 = 0;
                array = 0;

                if (array6 == -1 && array5 == -1)
                    found = String.valueOf(charArray[array4]
                            + charArray[array3])
                            + String.valueOf(charArray[array2])
                            + String.valueOf(charArray[array]);
                else if (array6 == -1)
                    found = String.valueOf(charArray[array5]
                            + charArray[array4] + charArray[array3])
                            + String.valueOf(charArray[array2])
                            + String.valueOf(charArray[array]);
                else
                    found = String.valueOf(charArray[array6]
                            + charArray[array5] + charArray[array4]
                            + charArray[array3])
                            + String.valueOf(charArray[array2])
                            + String.valueOf(charArray[array]);

            } else if (array2 == 83) {
                array3++;
                array2 = 0;
                array = 0;

                if (array6 == -1 && array5 == -1 && array4 == -1)
                    found = String.valueOf(charArray[array3])
                            + String.valueOf(charArray[array2])
                            + String.valueOf(charArray[array]);
                else if (array6 == -1 && array5 == -1)
                    found = String.valueOf(charArray[array4]
                            + charArray[array3])
                            + String.valueOf(charArray[array2])
                            + String.valueOf(charArray[array]);
                else if (array6 == -1)
                    found = String.valueOf(charArray[array5]
                            + charArray[array4] + charArray[array3])
                            + String.valueOf(charArray[array2])
                            + String.valueOf(charArray[array]);
                else
                    found = String.valueOf(charArray[array6]
                            + charArray[array5] + charArray[array4]
                            + charArray[array3])
                            + String.valueOf(charArray[array2])
                            + String.valueOf(charArray[array]);

            } else if (array == 83) {
                array2++;
                array = 0;

                if (array6 == -1 && array5 == -1 && array4 == -1
                        && array3 == -1)
                    found = String
                            .valueOf(charArray[array2] + charArray[array]);
                else if (array6 == -1 && array5 == -1 && array4 == -1)
                    found = String.valueOf(charArray[array3])
                            + String.valueOf(charArray[array2])
                            + String.valueOf(charArray[array]);
                else if (array6 == -1 && array5 == -1)
                    found = String.valueOf(charArray[array4]
                            + charArray[array3])
                            + String.valueOf(charArray[array2])
                            + String.valueOf(charArray[array]);
                else if (array6 == -1)
                    found = String.valueOf(charArray[array5]
                            + charArray[array4] + charArray[array3])
                            + String.valueOf(charArray[array2])
                            + String.valueOf(charArray[array]);
                else
                    found = String.valueOf(charArray[array6]
                            + charArray[array5] + charArray[array4]
                            + charArray[array3])
                            + String.valueOf(charArray[array2])
                            + String.valueOf(charArray[array]);

            } else {
                array++;
                if (array6 == -1 && array5 == -1 && array4 == -1
                        && array3 == -1 && array2 == -1)
                    found = String.valueOf(charArray[array]);
                else if (array6 == -1 && array5 == -1 && array4 == -1
                        && array3 == -1)
                    found = String
                            .valueOf(charArray[array2] + charArray[array]);
                else if (array6 == -1 && array5 == -1 && array4 == -1)
                    found = String.valueOf(charArray[array3])
                            + String.valueOf(charArray[array2])
                            + String.valueOf(charArray[array]);
                else if (array6 == -1 && array5 == -1)
                    found = String.valueOf(charArray[array4]
                            + charArray[array3])
                            + String.valueOf(charArray[array2])
                            + String.valueOf(charArray[array]);
                else if (array6 == -1)
                    found = String.valueOf(charArray[array5]
                            + charArray[array4] + charArray[array3])
                            + String.valueOf(charArray[array2])
                            + String.valueOf(charArray[array]);
                else
                    found = String.valueOf(charArray[array6]
                            + charArray[array5] + charArray[array4]
                            + charArray[array3])
                            + String.valueOf(charArray[array2])
                            + String.valueOf(charArray[array]);

            }
        }
        System.out.println("password found:" + " " + found);
    }        
}

【问题讨论】:

  • 请避免发布代码链接,而是发布带有您的问题的代码,这是我这次为您所做的事情。
  • 您的代码看起来有很多不必要的重复和不必要的复杂性,这让我们很难理解,也很难让您和我们调试。我要做的第一件事是重构和简化。或者更好的是,把它扔掉重新开始。
  • 我一直在为 3 个字母编写相同的程序,并且效果很好。代码:pastebin.com/fZKpLXuf 也许它可以帮助你。我试图将程序扩展到 6 个字母......我怎样才能在没有重复的情况下再次编写它?我必须用用户写的 1/2/3/4/5/6 检查每个可能的密码..
  • 正确格式化它可能帮助一点

标签: java


【解决方案1】:

不重复怎么写?

提示:首先将 6 个 arrayn int 变量替换为单个 int[] 变量

提示 #2:从头开始会比尝试通过修改此代码来重构更好。

(为什么?因为,我很难弄清楚那堵代码是否正确。如果你准确重构一个有错误的程序,你最终会得到另一个程序相同的错误...而且很可能是错误的结构,因为您重现了错误。)

【讨论】:

    【解决方案2】:

    首先你应该使用 for 循环填充数组,因为这样你可以获取键盘上的所有字符

    第二,你应该使用类变量,因为它可以让任何方法都可以访问它们,第三,你应该使用循环而不是实际上每次尝试,它会使密码的长度无限并且更容易玩。

    这是我尝试这样的事情时的代码:

        import java.util.Scanner;
        public class brute {
        public static int charCount = 0;
        public static String pass;
        public static int length;
        public static int ch = 0;
        public static char[] array = new char[181]; 
    
         public static void main(String[] args) {
            for(int i = 33; i < 180; i++){
                array[i] = (char)i;
            }
            array[180] = ' ';
            Scanner in = new Scanner(System.in);
        
            String input;
                do {
                    System.out.println("Please enter password");
                    input = in.nextLine();
                
                    //exit option
                    if(input == null) {
                        System.exit(0);
                    }
                
                    //data check1
                    try {
                        brute.pass = input.toLowerCase();
                    } 
                    catch(Exception ex){
                        System.out.println("Invalid input: incorrect data type. (Input must be an String) ");
                        continue;
                    }
                    length =  pass.length();
                    brute();
                    break;
            }while(true);
        
            
            
        }//main
    
    
        public static void brute() {
            long startTime = System.currentTimeMillis();
            String password = "";
            int count = 0;
            String prev = "";//backup
            int att = 0;
            do {
                prev = password;//make backup
            
                password += array[count];//add char
                count++;                 //up count
                att++;// up attempts
            
                System.out.println("Current iteration: " +  password);//display current guess
                System.out.println("Number of attempts: " + att);
                if(password == pass) {
                    break;
                }
                if(check(password) == 1) {
                
                    count = 0;
                    ch+=1;
                    prev = password;
                }
                else {
                    password = prev;
                }
            
            
            }while(ch < length);
            long endTime = System.currentTimeMillis();
        
        
        
            System.out.println("\n\n\n\n\n\n\n\nPassword guessed: " + password + 
    "\nPassword contains " + password.length() + " characters");
        System.out.println("\nIt took " + ((double)(endTime - startTime)/1000) + " 
    seconds to guess the entered password");
        
        }//algorithm
        public static int check(String password) {
    
            return password.charAt(ch) == pass.charAt(ch) ? 1 : 0;
        
        }//check0
    }//brute class
    

    【讨论】:

    • 一秒钟内 3000 个字符
    猜你喜欢
    • 1970-01-01
    • 2018-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多