Comb mdp.py

De wiki.nexiat.fr
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=""

Voir aussi