解释蛮力算法

我有一个蛮力算法,但从未完全理解它。我对正在发生的某些事情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将是该算法尝试解决的最后一件事(假设最大密码长度定义为五个字符)。

另外,只要您担心人们认为您出于恶意目的使用此算法,就不用担心了。几乎任何计算机系统实际上都不会受到这种攻击,并且您将很久以前就被密码真正地锁定了。

以上是 解释蛮力算法 的全部内容, 来源链接: utcz.com/qa/398844.html

回到顶部