Expliquer la force brute de l'algorithme

J'ai un algorithme brute force, mais jamais entièrement compris. J'ai une idée vague de ce qu'on fait, mais à chaque fois que j'essaie de suivre ce qui se passe exactement, je me suis perdu (par exemple, la index variable est un peu déroutant). Toutes les offres sur la façon de rendre l'algorithme plus efficace sont également les bienvenus.

Note - j'ai déjà de l'algorithme, et il compile et fonctionne. Merci de ne pas m'accuser d'essayer de l'utiliser pour des fins malveillantes, parce que je ne l'ai pas utilisé à cette fin, et jamais je ne plan à. Je veux juste savoir comment il fonctionne.

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);
}
}
  • La Force Brute n'est pas un nom d'un algorithme concret. vous devriez préciser de quoi êtes-vous à l'aide de cet algorithme pour.
  • en fait, il est. La Force Brute est l'algorithme qui énumère tous les mots de passe valides et tente un par un.
  • C'est un peu simple de code Java. Si vous ne le comprenez pas, je vous recommande de commencer par l'achat d'une bonne programmation Java livre de texte. Si vous avez une question spécifique, peut-être que nous pouvons y répondre. Mais "expliquer" ce n'est pas constructif ...
  • en fait par "force brute" est un nom pour n'importe quel algorithme qui consiste à essayer toutes les candidat possible des solutions dans un mauvais chemin. Par exemple, on peut (en théorie) utiliser la "force brute" pour résoudre un Soduku ...
  • Bien sûr. Mais il serait encore "force brute". Le nom est comparable aussi descriptif que "Dijkstra recherche". Vous pouvez également résoudre des problèmes très différents avec Dijkstra recherche de style.
  • nope. Dijkstra, la recherche est un algorithme spécifique pour une classe particulière de problèmes. La force Brute est tellement générique qu'il s'applique à tout problème dans lequel vous pouvez effectuer une itération sur les solutions possibles. (Il n'a même pas besoin d'être un ensemble fini de solutions ...)
  • par le Professeur Wikipédia: en.wikipedia.org/wiki/Brute-force_search#Basic_algorithm et je parie que vous trouverez les différents conférence des diapositives que de discuter d'un semblable "de base" force brute "algorithme". Et tandis que Dijkstra est à l'origine d'un plus court chemin dans les graphiques de l'algorithme, il peut être utilisé dans des domaines très différents, tels que trouver les différences entre les deux documents XML (rechercher).

InformationsquelleAutor syb0rg | 2012-12-30