Взломщик паролей грубой силы Java

1

Я выполняю задание для класса, в котором я должен создать взломанный пароль для взлома в java.

  1. Напишите функцию с помощью Recursion, чтобы взломать пароль. Пароль имеет неизвестную длину (максимум 10) и состоит из заглавных букв и цифр. (Сохраните фактический пароль в вашей программе, просто для проверки правильности введенной строки).

У меня есть решение:

import java.util.Arrays;

public class BruteForce {
  public static void main(String[] args) {
    bruteForce(3);
  }

  public static String bruteForce(int size) {
    int[] password = new int[size];
    String[] finalPassword = new String[size];
    for (int i = 0; i < size; i++) {
      password[i] = 0;
      finalPassword[i] = "";
    }
    String pass = "AAA";
    return computePermutations(size, password, 0, pass);
  }

  private static String computePermutations(int size, int[] password, int position, String pass) {
    String testString = "";
    String assemble = "";
    for (int i = 0; i < 36; i++) {
      password[position] = i;

      if (position != size - 1) {
        testString = computePermutations(size, password, position + 1, pass);
        if (testString != "") {
          return testString;
        }
      } else if (position == size - 1) {
        for (int j = 0; j < size; j++) {

          switch (password[j] + 1) {
            case 1:
              assemble = assemble + "A";
              break;
            case 2:
              assemble = assemble + "B";
              break;
            case 3:
              assemble = assemble + "C";
              break;
            case 4:
              assemble = assemble + "D";
              break;
            case 5:
              assemble = assemble + "E";
              break;
            case 6:
              assemble = assemble + "F";
              break;
            case 7:
              assemble = assemble + "G";
              break;
            case 8:
              assemble = assemble + "H";
              break;
            case 9:
              assemble = assemble + "I";
              break;
            case 10:
              assemble = assemble + "J";
              break;
            case 11:
              assemble = assemble + "K";
              break;
            case 12:
              assemble = assemble + "L";
              break;
            case 13:
              assemble = assemble + "M";
              break;
            case 14:
              assemble = assemble + "N";
              break;
            case 15:
              assemble = assemble + "O";
              break;
            case 16:
              assemble = assemble + "P";
              break;
            case 17:
              assemble = assemble + "Q";
              break;
            case 18:
              assemble = assemble + "R";
              break;
            case 19:
              assemble = assemble + "S";
              break;
            case 20:
              assemble = assemble + "T";
              break;
            case 21:
              assemble = assemble + "U";
              break;
            case 22:
              assemble = assemble + "V";
              break;
            case 23:
              assemble = assemble + "W";
              break;
            case 24:
              assemble = assemble + "X";
              break;
            case 25:
              assemble = assemble + "Y";
              break;
            case 26:
              assemble = assemble + "Z";
              break;
            case 27:
              assemble = assemble + "0";
              break;
            case 28:
              assemble = assemble + "1";
              break;
            case 29:
              assemble = assemble + "2";
              break;
            case 30:
              assemble = assemble + "3";
              break;
            case 31:
              assemble = assemble + "4";
              break;
            case 32:
              assemble = assemble + "5";
              break;
            case 33:
              assemble = assemble + "6";
              break;
            case 34:
              assemble = assemble + "7";
              break;
            case 35:
              assemble = assemble + "8";
              break;
            case 36:
              assemble = assemble + "9";
              break;
          }

        }
        System.out.println(assemble);
        if (assemble.equalsIgnoreCase(pass)) {
          System.out.println("Password is: " + assemble);
          break; //replace this with: return assemble;
        } else {
          assemble = "";
        }
      }


    }
    return "";
  }
}

Однако, когда я запускаю программу, пароль AAA никогда не работает, но 998 прекрасно работает, что именно не так?

  • 0
    Кажется, он находит пароль, но программа просто не остановится. Кто-нибудь знает как почему команда break не работает?
  • 0
    Кажется, вы не можете выйти из оператора if, как мне выйти из цикла в этом случае?
Теги:
string
equals

2 ответа

3
Лучший ответ

Я думаю, вы должны использовать оператор return, если совпадение найдено -

if (assemble.equalsIgnoreCase(pass)) {
    System.out.println("Password is: " + assemble);
    return assemble; // This is missing
}
  • 0
    Спасибо, это решило проблему, я должен был использовать возврат сборки вместо прерывания.
1

Ваша основная проблема заключается в том, чтобы сломать петлю в правильной точке. Попробуйте использовать метку, чтобы разбить цикл и решить эту проблему. Узнайте больше о ярлыках здесь: http://docs.oracle.com/javase/tutorial/java/nutsandbolts/branch.html

class BreakWithLabelDemo {
public static void main(String[] args) {

    int[][] arrayOfInts = { 
        { 32, 87, 3, 589 },
        { 12, 1076, 2000, 8 },
        { 622, 127, 77, 955 }
    };
    int searchfor = 12;

    int i;
    int j = 0;
    boolean foundIt = false;

search:
    for (i = 0; i < arrayOfInts.length; i++) {
        for (j = 0; j < arrayOfInts[i].length;
             j++) {
            if (arrayOfInts[i][j] == searchfor) {
                foundIt = true;
                break search;
            }
        }
    }

    if (foundIt) {
        System.out.println("Found " + searchfor + " at " + i + ", " + j);
    } else {
        System.out.println(searchfor + " not in the array");
    }
 }}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню