Prérequis : maîtriser les bases de la programmation Python (variables, boucles, entrées/sorties, fonctions)
Contexte de la mise en œuvre de l'activité : en classe, en présence de l'enseignant
Ressources, matériel, documents nécessaires : bibliothèque Python (random)
Présentation
Il n'est pas toujours simple d'inventer un mot de passe assez complexe pour résister à différentes attaques.
Le login quant à lui doit parfois n'être constitué qu'avec des caractères alphanumériques.
Nous allons réaliser un programme qui permet de générer un mot de passe à partir d'une liste de caractères alphanumériques.
Les caractères alphanumériques sont un sous-ensemble de caractères qui comprennent les alphabétiques représentant les lettres (de A à Z dans l'alphabet latin) minuscules et majuscules, ainsi que les caractères numériques comprenant les chiffres arabes (de 0 à 9).
Préparation
Une liste d'éléments en python s'écrit :
une_liste = ['a', 'b', 'c'] avec 0, 1, 2 les indices respectifs de a, b et c. On peut obtenir le deuxième élément avec :
une_liste[1] renvoie b
On peut obtenir l'indice du troisième élément (c) avec :
une_liste.index('c') renvoie 2
On peut connaitre le nombre d'éléments dans la liste avec la fonctionlen:
len(une_liste) renvoie 3
On peut concaténer une liste avec une autre :
une_liste + ['d'] renvoie ['a', 'b', 'c', 'd']
Pour choisir un élément aléatoirement dans une liste, on utilise choice du module random que l'on importe avec :
from random import choice
Il suffit ensuite d'appeler la fonction :
choice(une_liste) renvoie b
Pour mélanger une liste on utilise shuffle du module random
shuffle(une_liste)
join permet de convertir une liste de caractères en chaîne de caractères :
''.join(une_liste) renvoie abcd
Pour mettre un caractère en majuscule on utilise la méthode upper et pour mettre en minuscule, la méthode lower :
'a'.upper() renvoie A
'A'.lower() renvoie a
Traitement des données avec Python
Nous allons créer une fonction qui génère un mot de passe constitué de n1 majuscules, n2 minuscules, n3 nombres et n4 caractères spéciaux, tous choisis dans trois listes.
1. Complétez la fonction gene_mdp
from random import choice, shuffle
ALPHABET = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z']
NB = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
SPE = ['&', '-', '@', '*', '+', '%', '$', '/', '?', '!', ':', '<', '>']
def gene_mdp(n1, n2, n3, n4):
mdp = []
for _ in range(n1):
mdp += [choice(ALPHABET)]
....... # A compléter, plusieurs lignes !
shuffle(mdp)
mdp = ''.join(mdp)
return mdp
mdp = gene_mdp(2, 4, 4, 2)
print(mdp)
On propose de vérifier si un login entré par l'utilisateur fait au moins six caractères et que chaque caractère est alphanumérique.
2. Complétez le fonction verif_login
def verif_login(login):
if ............................:
return "login incorrect !"
for c in login:
if c.upper() .........................and...................................:
return "login incorrect !"
.........................................
login = input("Votre login : ")
print(verif_login(login))