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).
Vous devez vous connecter pour publier un commentaire.
De force Brute est une heuristique technique qui signifie, essentiellement, vous allez essayer d'analyser tous les scénarios possibles en profitant de façon beaucoup plus rapide qu'un ordinateur n'est qu'un cerveau humain. Par exemple, vous n'êtes pas d'essayer de déductivement figure le mot de passe ou la prochaine meilleure déplacer dans un jeu d'Échecs; à vous de tester toutes les situations possibles et d'utiliser le bon (ou le meilleur selon certains métrique, en fonction de ce que la force brute de l'algorithme est destiné à accomplir).
Votre code va tout simplement à travers toutes les valeurs possibles que pourrait être tenu pour un mot de passe et vérifie si elle a trouvé ou non. Si ça ne marche pas, il se déplace à la prochaine combinaison possible jusqu'à ce qu'il n'.
C'est aussi une démonstration d'un le scénario du pire, puisque le mot de passe, étant définie comme
ZZZZZ
, sera la dernière chose que l'algorithme tente comme une solution (en supposant que le maximum de longueur de mot de passe est défini comme cinq caractères.)Également, autant que vous être inquiet que les gens pensent que vous êtes à l'aide de cet algorithme à des fins malveillantes, je ne serais pas trop inquiet. À peine l'un des systèmes informatiques seraient vulnérables à ce genre d'attaque, et vous serait verrouillé longtemps avant de vous jamais en fait eu lieu par un mot de passe.