Certains membres de mon équipe discutaient des problèmes de stockage de mot de passe et de sécurité générale aujourd'hui. Quoi qu'il en soit, la discussion a brièvement porté sur la façon dont les attaques par force brute accélérées par le GPU sont comparées aux implémentations traditionnelles de CPU seulement.Permutation Génération
Cela m'a intéressé, alors j'ai décidé de jouer avec du code. Comme je n'avais jamais rien écrit de tel auparavant, j'ai décidé d'écrire une simple brute-forcer. Ma mise en œuvre initiale traitait un mot de passe de longueur fixe (4 chiffres). À des fins de test, je l'ai mis en œuvre un la:
for(char a = '0'; a <= '9'; ++a)
{
for(char b = '0'; b <= '9'; ++b)
{
for(char c = '0'; c <= '9'; ++c)
{
for(char d = '0'; d <= '9'; ++d)
{
candidate[0] = a; candidate[1] = b;
candidate[2] = c; candidate[3] = d;
// Test 'candidate'...
}
}
}
}
Cela fonctionne bien, mais est évidemment inflexible. J'ai essayé de généraliser ce qui précède pour gérer n'importe quelle longueur de mot de passe, mais je n'ai pas réussi à le faire. Pour une raison que j'ignore, je n'arrive pas à comprendre la logique que ces forceurs utilisent pour faire défiler des possibilités de caractères 1-n avec un «alphabet».
Y at-il un algorithme commun qui vous permet d'accomplir cela? Tous les exemples sont les bienvenus.
Le concept que vous recherchez est appelé [récursion] (http://en.wikipedia.org/wiki/Recursion) :) –
en double - http://stackoverflow.com/q/3183469/21727 – mbeckish
le prob lem est que vous devriez avoir n boucle imbriquée, mais n est connu seulement à l'exécution ... =/ – BlackBear