Comb mdp.py
Aller à la navigation
Aller à la recherche
| Fiche express | |
|---|---|
| Domaine | Sécurité — mots de passe |
| Rôle | Génération des combinaisons de casse |
| Usage | comb_mdp.py <mot_de_passe>
|
Script Python générant toutes les combinaisons majuscule/minuscule des lettres d'un mot de passe passé en argument (utile pour un dictionnaire d'attaque).
#!/usr/bin/python
#-*- coding:utf-8 -*-
# script de détermination de combinaison de mots de passe
import sys
#le mot de passe est passé en premier argument du script
mdp=sys.argv[1]
#la liste de la position des lettres dans le mot de passe
liste_pos_lettre=[];
#le nombre de lettres dans le mot de passe
nbr_lettre=0
#détermination de la position des lettres
#parcours de toute la chaine
for c in range(0,len(mdp)):
#teste si c'est une lettre ou pas
if ord(mdp[c:c+1])>96 and ord(mdp[c:c+1])<123 :
#mémorisation de la position de la lettre
liste_pos_lettre.append(c)
nbr_lettre+=1
#affichage optionnel de quelques informations sur le mot de passe
#print "Le mot de passe comporte "+str(nbr_lettre)+" lettres"
#print "Les positions des letttres sont : "+str(liste_pos_lettre)
#Calcul du nombre de combinaisons possibles
nbr_comb=2**nbr_lettre
#print "Ce qui donne "+str(nbr_comb)+" combinaisons possibles"
# réalisation des combinaisons possibles
# le mot de passe calculé est initialement vide
comb_mdp=""
#faire autant de fois que de combinaisons possibles
for comb in range(0,nbr_comb):
# print "Traitement de la combinaison : "+str(comb)
#inspection de chaque lettre
for c in range(0,nbr_lettre):
#détermine s'il faut passer la lettre en majuscule ou la laisser en minucule suivant la combinaison actuellement traitée
code_lettre = int(ord(mdp[liste_pos_lettre[c]:liste_pos_lettre[c]+1])-32*((2**c & comb)/(2**c)))
comb_mdp=comb_mdp+chr(code_lettre)
#complément de la chaine jusqu'à la prochaine lettre
if c<nbr_lettre-1:
comb_mdp=comb_mdp+mdp[liste_pos_lettre[c]+1:liste_pos_lettre[c+1]]
#regarde s'il reste des caractères après la dernière lettre et les replace à la fin
if liste_pos_lettre[nbr_lettre-1]<len(mdp):
comb_mdp=comb_mdp+mdp[liste_pos_lettre[nbr_lettre-1]+1:len(mdp)]
#affiche une combinaison possible
print comb_mdp
comb_mdp=""