Объясните алгоритм грубой силы [закрыто]

У меня есть алгоритм перебора, но я так и не понял его полностью. У меня есть смутное представление о некоторых вещах, которые происходят, но каждый раз, когда я пытаюсь следить за тем, что происходит, я теряюсь (например,index переменная немного сбивает с толку). Любые предложения о том, как сделать алгоритм более эффективным, также приветствуются.

Заметка - У меня уже есть алгоритм, и он компилируется и работает. Пожалуйста, не'не обвиняет меня в попытке использовать это для злых умыслов, потому что я неЯ использовал его для этой цели, и я никогда не планирую. Я просто хочу знать, как это работает.

public class BruteForceTest
{
    public String username = new String();
    public static String password = "ZZZZZ";
    public static char[] charset = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray();
    private static char[] currentGuess = new char[1];

public static void bruteForce()
    {
        String attempt = new String();
        Date start = new Date();
        while (true)
        {
            if (attempt.equals(password))
            {
                Date end = new Date();
                System.out.println("Password: " + attempt + "\nTotal time to crack: " + ((end.getTime() - start.getTime()) / 1000) + " seconds." + "\n");
                break;
            }
            attempt = in.toString();
            // System.out.println("Tried: " + attempt);
            in.increment();
        }
    }

    public BruteForceTest()
    {
        Arrays.fill(currentGuess, charset[0]);
    }

    public void increment()
    {
        int index = currentGuess.length - 1;
        while (index >= 0)
        {
            if (currentGuess[index] == charset[charset.length - 1])
            {
                if (index == 0)
                {
                    currentGuess = new char[currentGuess.length + 1];
                    Arrays.fill(currentGuess, charset[0]);
                    break;
                }
                else
                {
                    currentGuess[index] = charset[0];
                    index--;
                }
            }
            else
            {
                currentGuess[index] = charset[Arrays.binarySearch(charset, currentGuess[index]) + 1];
                break;
            }
        }
    }

    public String toString()
    {
        return String.valueOf(currentGuess);
    }
}

Ответы на вопрос(1)

Ваш ответ на вопрос