-1

I have problem with the code. the program is finding every password with 1 letter and 3 letters. password with 2 letters the program only find the password "11". same way with 5 letters only finding "11111". with 4/6 letters the program doesnt find any password.

the code with alot "if" sorry about the mess but thats the only way I was thinking about to create the Password finder.(The program is a personal project for practicing)

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);
    }        
}
Mick Mnemonic
  • 7,808
  • 2
  • 26
  • 30
Roy Amoyal
  • 717
  • 4
  • 14
  • 1
    Please lets avoid posting links to code, but instead posting code with your question, something I've done for you this time. – Hovercraft Full Of Eels Oct 04 '15 at 23:59
  • 3
    Your code looks like it has a lot of needless repetition and unnecessary complexity making it very hard for us to understand and for you and us to debug. First thing I'd do would be to refactor and simplify. Or better yet, throw this out and start over. – Hovercraft Full Of Eels Oct 05 '15 at 00:02
  • I have been writing the same program for 3 letters and it works fine. code: http://pastebin.com/fZKpLXuf maybe it could help you. I was trying to expand the program to 6 letters... and How can I write it again without the repetetion? I have to check every possible password with 1/2/3/4/5/6 that the user writes.. – Roy Amoyal Oct 05 '15 at 00:07
  • 2
    Formatting it correctly *might* help a *little*. – ChiefTwoPencils Oct 05 '15 at 00:07
  • 2
    See also [Why is “copy and paste” of code dangerous?](http://stackoverflow.com/questions/2490884/why-is-copy-and-paste-of-code-dangerous) – Mick Mnemonic Oct 05 '15 at 00:36

2 Answers2

1

How can I write it again without the repetetion?

Hint: Start by replacing the 6 arrayn int variables with a single int[] variable

Hint #2: Starting again from a blank slate would be better than trying to refactor by modifying this code.

(Why? Because, I would be hard pressed to figure out whether or not that wall of code is correct. And if you accurately refactor a program with bugs, you end up with another program with the same bugs ... and quite possibly the wrong structure, because you reproduced the bugs.)

Stephen C
  • 698,415
  • 94
  • 811
  • 1,216
-3

First you should fill the array using a for loop, because that way yo can get all the characters on the keyboard

Second, you should use class variables, since it make them accessible from any method, third, you should use a loop instead of actually every attempt, it will make the length of the password infinite and easier to play with.

This is my code from back when I tried something like this :

    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
marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459