Gestionnaire mot de passe Isn

Joachim.C Messages postés 2 Date d'inscription   Statut Membre Dernière intervention   -  
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   -
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
A voir également:

1 réponse

[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
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
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
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/
0
Joachim.C Messages postés 2 Date d'inscription   Statut Membre Dernière intervention  
 
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()

0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
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...
0