Объясните алгоритм грубой силы [закрыто]
У меня есть алгоритм перебора, но я так и не понял его полностью. У меня есть смутное представление о некоторых вещах, которые происходят, но каждый раз, когда я пытаюсь следить за тем, что происходит, я теряюсь (например,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);
}
}