Menu

Gestionnaire mot de passe Isn

Messages postés
2
Date d'inscription
lundi 20 mai 2019
Statut
Membre
Dernière intervention
20 mai 2019
-
Bonjour,

Bonjour pour mon projet Isn j'ai choisis le sujet qui traitait de la création d'un gestionnaire de mot de passe.

J'ai déjà effectuer toute l'interface graphique avec Tkinter et crée la base du gestionnaire mais quand je rentre les mot de passe qui doivent s'écrire dans un autre fichier texte ceux ci apparaissent en clair sans être crypter, ce qui n'est pas très sécurisé. Si quelqu'un pourrait m'aider pour crypter et décrypter les mots de passes cela serait très sympathique.


from tkinter import *
 
from tkinter import messagebox
 
loginwin = Tk()
 
loginwin.wm_title("Login")
 
loginwin.geometry("225x75")
 
win = Tk()
 
win.wm_title("Password Manger")
 
win.geometry("550x215")
 
win.withdraw()
 
u = StringVar()
 
p = StringVar()
 
a = StringVar()
 
u1 = StringVar()
 
p1 = StringVar()
 
def login():
 
    username1 = u.get()
 
    password1 = p.get()
 
    print(username1,password1)
 
    if username1 == "Joachim.C":
 
        if password1 == "MP":
 
            messagebox.showinfo("Login", "Login Complete")
 
            loginwin.withdraw()
 
            win.deiconify()
 
        else:
 
            messagebox.showinfo("Login", "Incorrect Password or Username")
 
    else:
 
        messagebox.showinfo("Login", "Incorrect Password or Username")
 
def add():
 
        account11 = str(account.get())
 
        username22 = str(username1.get())
 
        password22 = str(password1.get())
 
        file = open("passwords.txt", "a")
 
        file.write("\n" + account11 + " " + username22 + " " + password22)
 
        file.close()
 
Label(loginwin, text="   Username:  ").grid(row=1, column=1)
 
Label(loginwin, text="   Password:  ").grid(row=2, column=1)
 
Label(win, text="   Account:  ").grid(row=1, column=1)
 
Label(win, text="   Username: ").grid(row=2, column=1)
 
Label(win, text="   Password: ").grid(row=3, column=1)
 
username = Entry(loginwin, textvariable = u)
 
username.grid(row=1, column=2)
 
password = Entry(loginwin, textvariable = p, show = "*")
 
password.grid(row=2, column=2)
 
account = Entry(win, textvariable = a)
 
account.grid(row=1, column=2)
 
username1 = Entry(win, textvariable = u1)
 
username1.grid(row=2, column=2)
 
password1 = Entry(win, textvariable = p1)
 
password1.grid(row=3, column=2)
 
button_login = Button(loginwin, text="Login", command=login)
 
button_login.grid(row=3, column=1)
 
button_add = Button(win, text="Add", command=add)
 
button_add.grid(row=4, column=1)
 
loginwin.mainloop()
 
win.mainloop()


Configuration: Macintosh / Safari 11.1.2
Afficher la suite 

1 réponse

Messages postés
5141
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
26 juin 2019
779
0
Merci
Salut Joachim.C,

Le code de ce que tu as programmé correspond apparemment à un gestionnaire d'authentification par mot de passe, et non pas à un gestionnaire de mots de passe.

1.

On désigne habituellement par "gestionnaire de mots de passe" un programme capable de stocker les mots de passe sous forme sécurisée, afin de permettre à l'utilisateur de les récupérer. C'est une sorte de coffre-fort à mots de passe :

https://www.commentcamarche.net/faq/29818-choisir-securiser-et-gerer-ses-mots-de-passe#gestion-des-mots-de-passe-les-logiciels-gratuits

Dans ce cas, les mots de passe sont effectivement stockés sous forme chiffrée, avec un algorithme de chiffrement, déchiffrables au moyen d'une clef connue de l'utilisateur, ce qui permet au programme de restituer la clef en clair.

2.

Un gestionnaire d'authentification par mot de passe est un programme intégré à une application ou à un système, qui authentifie l'accès d'un utilisateur à cette application ou ce système.

Dans ce type d'applications, les mots de passe sont généralement stockés sous forme hachée et non sous forme chiffrée, avec un algorithme de hachage non réversible. A la différence d'un algorithme de chiffrement, on ne peut pas, à partir de la version hachée, remonter à la version en clair. Tout ce qu'on peut faire, c'est comparer la version hachée d'un mot de passe entré par l'utilisateur avec la version hachée stockée.

Les mots de passe sont hachés et salés, le salage étant souhaitable pour éviter les attaques à base d'usage de rainbow table.

https://fr.wikipedia.org/wiki/Secure_Hash_Algorithm
https://www.commentcamarche.net/faq/8821-comment-bien-stocker-et-verifier-un-mot-de-passe
(note, cet article évoque MD5 et SHA1, qui ne sont plus actuellement conseillés pour faire cela pour des raisons de sécurité)
https://fr.wikipedia.org/wiki/Rainbow_table

Python te donne accès par la hashlib aux outils dont tu as besoin. La documentation officielle Python de hashlib est là : https://docs.python.org/3/library/hashlib.html

Une brève recherche avec des mots clefs appropriés te ferait tomber sur des exemples en Python (par exemple : hashlib how to store hashed passwords in python).


Dal
[Dal]
Messages postés
5141
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
26 juin 2019
779 -
et si tu veux vraiment faire du chiffrement, il faudra installer un module non standard.

par exemple :

- https://pycryptodome.readthedocs.io/en/latest/ (fork de PyCrypto, qui n'est plus maintenu)
- https://cryptography.io/en/latest/
- https://www.dlitz.net/software/python-pbkdf2/

tu as des exemples d'utilisation dans ces docs, et en cherchant un peu, tu tombes sur des articles qui te montrent comment faire fonctionner l'ensemble, comme celui-ci : https://nitratine.net/blog/post/python-encryption-and-decryption-with-pycryptodome/
Joachim.C
Messages postés
2
Date d'inscription
lundi 20 mai 2019
Statut
Membre
Dernière intervention
20 mai 2019
-
Bonjour, merci énormément pour votre réponse mais je vous confirme je dois utiliser un algorithme de hachage. En effet mon but est que les login demander via le programme soit écrit dans un fichier texte avec uniquement le mot de passe haché. J'ai vu que la fonction, hashlib pouvait être une solution mais le problème est que commençant la programmation je ne sait pas trop comment l'utiliser et où la placée



def add():

account11 = str(account.get())

username22 = str(username1.get())

password22 = str(password1.get())

file = open("passwords.txt", "a")

file.write("\n" + account11 + " " + username22 + " " + password22)

file.close()

[Dal]
Messages postés
5141
Date d'inscription
mercredi 15 septembre 2004
Statut
Contributeur
Dernière intervention
26 juin 2019
779 -
en faisant la recherche Google que je suggérais, en 2ème résultat on trouve celui-ci :

https://www.vitoshacademy.com/hashing-passwords-in-python/

qui propose des fonctions toutes faites permettant de hacher un mot de passe et de vérifier un mot passe haché par rapport à un mot de passe fourni, avec des explications claires et détaillées...
Commenter la réponse de [Dal]