seb69 a écrit:Merci à tous les 2 d'intervenir aussi vite sur le sujet ....
Pour ce qui est de l'ordi, pas de problèmes, la machine est extrèment puissante (Octo processeur & 12 Go RAM ...).
Ce que je recherche, c'est une formule, qu'informaticien, je nommerai plus volontiers algorithme, qui me permette :
si l'on admet avoir 127 caractères utilisables pour composer un mot de passe, dont la taille est : au minimum de 1 caractères, et au maximum de 20 caractères, et que le même caractère peut être utilisé plusieurs fois dans la composition du mot de passe ( par un exemple : mot de passe pourrait très bien être AAAAAAA), je veux pouvoir lister tous les mots de passes possibles.
Bien à vous.
128^20 =1393796574908163946345982392040522594123776
En Go sur le disque: 1298074214633706907132624082305024
Faut pas s'étonner qu'il n'y aie pas de DB de mot de passes, la taille n'est pas réaliste et du moment qu'on sait les générer il n'y a aucun intêret à les stocker sur le disque (c'est tellement rapide à générer que ça va de toutes façon nettement plus rapidement que s'il fallait les lire sur le disque).
A part ça je te renvoie sur le thread et au programme que j'ai écrit en dernier pour que tu puisses voir comment écrire un algo récursif et qui s'adapterai facilement a ton problème de mot de passe puisque le but est de faire un calcul basé sur toutes les combinaisons possibles d'un vecteur à X position (ce vecteur pourrait contenir les lettres de tes mots de passe et mon programme les listerai tous, par contre il faudrait ajouter une boucle pour faire de 1 à X comme longueur puisque moi je faisais exactement X)
autre threadPS: Dernier conseil, ta machine à beau avoir 8 cpu, si tu ne parallélise pas l'algorithme tu n'en utiliseras qu'un.
Si 1 cpu gènère 10'000'000'000 de mot de passes par seconde (et que tu as un algo parallélisé pour en utiliser 8), il te faudra 552462493225267926475291 ans pour les générer tous.
Bon je te l'ai fait, c'est du ruby (ça ne génère que les mots de passe avec les chiffres de 0 à 9) et ça n'écrit pas sur le disque:
- Code: Tout sélectionner
def pass_l(ks, l)
if l == 0
puts "#{ks}"
else
for i in (0..9) do
pass_l(ks + [i], l -1)
end
end
end
def pass(l)
for i in (0..l) do
pass_l([], i)
end
end