Dans ce mini-projet, vous devez écrire un système d'authentification par login/mot de passe à un service qui permet de stocker une phrase secrète. Comme précédemment le menu doit contenir trois choix:
- login : s'authentifier puis afficher la phrase secrète. Proposer de changer cette phrase.
- register: s'enregistrer puis saisir la phrase secrète à stocker.
- quit: pour ... quitter le programme.
Remarques:
- les données doivent bien entendu être stockées dans une base de données.
- on ne doit pas pouvoir choisir un login déjà utilisé.
- les mots de passe doivent être hachés. Voir ici pour le principe et ici pour la fonction de hachage à utiliser.
Ouvertures:
- Proposer de changer le mot de passe.
- Vérifier la force du mot de passe proposé (calcul d'entropie).
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98 | import sqlite3
import hashlib
def hachage(chaine:str) -> str:
'''
renvoie le condensé de chaine en utilisant la fonction de
hachage md5 du module hashlib.
'''
return hashlib.md5(chaine.encode()).hexdigest()
def register():
go = True
while go:
nom = input("Choix de l'identifiant : ")
rq = c.execute("SELECT * FROM users WHERE pseudo = ?;", [nom])
resultat = rq.fetchone()
if resultat is None:
mdp = input("Choix du mdp : ")
ps = input("Saisissez votre phrase secrète : ")
c.execute("INSERT INTO users VALUES (?, ?, ?);", [nom, hachage(mdp), ps])
go = False
else:
print("Identifiant déjà attribué. Veuillez recommencer.")
def login():
nom = input('Identifiant ? ')
rq = c.execute("SELECT * FROM users WHERE pseudo = ?;", [nom])
resultat = rq.fetchone()
if resultat is None:
print("Identifiant inconnu")
else:
mdp = input('Mot de passe ? ')
mdp_hash = hachage(mdp)
if mdp_hash == resultat[1]:
print('Authentification réussie')
menu_login(nom)
else:
print('Mot de passe erroné')
def menu_login(user):
go = True
while go:
print(15 * "-" + "\n1. Consulter la phrase secrète\n2. Modifier la phrase secrète\n3. Quitter\n" + 15 * "-")
choix = input("Votre choix: ")
if choix == '1':
consulter(user)
elif choix == '2':
modifier(user)
else:
go = False
def consulter(user):
rq = c.execute("SELECT content FROM users WHERE pseudo = ?;", [user])
print(f"Phrase secrète: {rq.fetchone()[0]}")
def modifier(user):
ps = input("Saisissez votre nouvelle phrase secrète : ")
c.execute("UPDATE users SET content = ? WHERE pseudo = ?;", [ps, user])
print("Modification effectuée")
#Connexion
connexion = sqlite3.connect('miniprojet.db')
#Récupération d'un curseur
c = connexion.cursor()
# ---- début des instructions SQL
#Création d'une table
c.execute("""
CREATE TABLE IF NOT EXISTS users(
pseudo TEXT PRIMARY KEY,
mdp INTEGER,
content TEXT);
""")
#c.execute("DELETE FROM users;")
go = True
while go:
print(15 * "-"+"\nMenu \n1. login\n2. register\n3. quit\n" + 15 * "-")
choix = input("Votre choix: ")
if choix == '1':
login()
elif choix == '2':
register()
else:
go = False
# ---- fin des instructions SQL
#Validation
connexion.commit()
#Déconnexion
connexion.close()
|