解释蛮力算法

我有一个powershell算法,但从未完全理解它。 我对某些事情有一个模糊的把握,但是每当我试着追踪确切发生的事情时,我就迷失了(例如, 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); } } 

暴力强制是一种启发式技术,本质上意味着您将尝试通过利用计算机比人脑更快的速度来分析每种可能的情况。 例如,你不是试图在国际象棋游戏中演绎密码或下一个最佳动作; 您只需测试每种可能的情况并使用正确的情况(或根据某些指标最好的情况,具体取决于蛮力算法要实现的目标)。

您的代码只需查看可能为密码保留的所有可能值,并检查是否找到了密码。 如果没有,它将继续进行下一个可能的组合,直到它完成。

这也是最坏情况的演示,因为密码被定义为ZZZZZ ,将是算法尝试作为解决方案的最后一件事(假设最大密码长度定义为五个字符。)

此外,只要您担心人们认为您将此算法用于恶意目的,我就不会太担心。 几乎没有任何计算机系统实际上容易受到这种攻击,并且在您真正发生密码之前很久就会被锁定。