Je voudrais coder un gestionnaire  de mdp avec python

Fermé
jerome - Modifié le 26 janv. 2023 à 21:30
 raplator - 27 janv. 2023 à 11:39

Bonjour,

je voudrais coder un gestionnaire  de mdp avec python et à l'aide du module " tkinter". Voici mon code actuelle, en fait j'en ai 2 : le premier

# Création de la fenêtre
from tkinter import *
import tkinter

# fenêtre principale
fenetre = Tk()
fenetre.title("Gestionnaire de mdp")
fenetre.geometry("400x300")
fenetre.maxsize(2000, 1200)
fenetre.config(bg="#47c595")

texte1 = Label(fenetre, text="Gestionnaire de mot de passe")
texte1.pack()
cadre1 = Frame(fenetre)
cadre1.pack()


# Fenetre secondaire de création d'utilisateur
def action2():
    utilisateur = Tk()
    utilisateur.title("Création d'un nouvel utilisateur")
    utilisateur.geometry("520x400")

    entrée1 = Entry(utilisateur)
    entrée2 = Entry(utilisateur)
    saisie = Entry(utilisateur)

    Label(utilisateur, text="Entrez votre prénom").grid(row=0, column=0)
    entrée1.grid(row=1, column=0)
    Label(utilisateur, text="Entrez votre nom").grid(row=2, column=0)
    entrée2.grid(row=3, column=0)
    Label(utilisateur, text="Entrez ici votre mot de passe").grid(row=4, column=0)
    saisie.grid(row=5, column=0)

    def getEntry():
        res = entrée1.get(), entrée2.get(), saisie.get()
        print("étape de récupération effectuee")
        print(res)
        first_name = res[0]
        last_name = res[1]
        password = res[2]
        profiles [first_name + last_name] = password
        Label(utilisateur, text = "Vos données ont été enregistrées").grid(row = 9, column=5)

    boutonen = Button(utilisateur, text="Enregistrer", command=getEntry).grid(row=7, column=3)


bouton1 = Button(cadre1, text="Créer un nouvel utilisateur", command=action2)



def action():
    connexion = Tk()
    connexion.title("Se connecter à sa base de données")
    connexion.geometry("400x400")

    saisie1 = Entry(connexion)
    Label(connexion, text="Entrez  votre prénom").grid(row=1, column=0)
    saisie1.grid(row=2, column=0)

    saisie2 = Entry(connexion)
    Label(connexion, text="Entrez votre nom").grid(row=1, column=1)
    saisie2.grid(row=2, column=1)

    mdp = Entry(connexion)
    Label(connexion, text="Entrez ici votre mot de passse").grid(row=3, column=0)
    mdp.grid(row=4, column=0)

    def check_profile():
        profiles = {"user1": {"first_name": "Gégé", "last_name": "Nom1", "password": "azerty"},
                    "user2": {"first_name": "prenom1", "last_name": "nom2", "password": "9876"}}
        first_name, last_name, password = saisie1.get(), saisie2.get(),mdp.get()
        for user, user_data in profiles.items():
            if user_data["first_name"] == first_name and user_data["last_name"] == last_name and user_data["password"] == password:Label(connexion, text="Connexion réussie").grid(row = 5, column = 1)
            break
        else:
            Label(connexion, text="Utilisateur ou mot de passe incorrect").grid(row=5, column=1)


    connexion = Button(connexion, text="connexion", command=check_profile)
    connexion.grid(row=6, column=1)


bouton2 = Button(cadre1, text="Se connecter à sa base de données", command=action)
bouton1.pack()
bouton2.pack()

from ctypes import windll

windll.shcore.SetProcessDpiAwareness(1)
0

# affichage de la fenêtre
fenetre.mainloop()

Et le second : 

import hashlib
import tkinter
from tkinter import *

# fenêtre principale
fenetre = Tk()
fenetre.title("Gestionnaire de mdp")
fenetre.geometry("400x300")
fenetre.maxsize(2000, 1200)
fenetre.config(bg="#47c595")

texte1 = Label(fenetre, text="Gestionnaire de mot de passe")
texte1.pack()
cadre1 = Frame(fenetre)
cadre1.pack()

# Creating profiles dictionary
profiles = {}

# Fenetre secondaire de création d'utilisateur


def action2():
    utilisateur = Tk()
    utilisateur.title("Création d'un nouvel utilisateur")
    utilisateur.geometry("520x400")
    entrée1 = Entry(utilisateur)
    entrée2 = Entry(utilisateur)
    saisie = Entry(utilisateur)
    Label(utilisateur, text="Entrez votre prénom").grid(row=0, column=0)
    entrée1.grid(row=1, column=0)
    Label(utilisateur, text="Entrez votre nom").grid(row=2, column=0)
    entrée2.grid(row=3, column=0)
    Label(utilisateur, text="Entrez ici votre mot de passe").grid(row=4, column=0)
    saisie.grid(row=5, column=0)


    def getEntry():
        first_name = entrée1.get()
        last_name = entrée2.get()
        # Creating a new password using the first name and the last name
        password = first_name + last_name
        # Hashing the password using sha256
        hashed_password = hashlib.sha256(password.encode()).hexdigest()
        # Adding the profile to the dictionary
        profiles[first_name + last_name] = hashed_password
        print("Profile crée")
        Label(utilisateur, text="Vos données ont été enregistrées").grid(
            row=9, column=5)
    bouton_save = Button(utilisateur, text="Enregistrer",
                        command=getEntry).grid(row=7, column=3)

    bouton_create = Button(
        cadre1, text="Créer un nouvel utilisateur", command=action2)


def action():
    connexion = Tk()
    connexion.title("Se connecter à sa base de données")
    connexion.geometry("400x400")
    saisie1 = Entry(connexion)
    Label(connexion, text="Entrez  votre prénom").grid(row=1, column=0)
    saisie1.grid(row=2, column=0)
    saisie2 = Entry(connexion)
    Label(connexion, text="Entrez votre nom").grid(row=1, column=1)
    saisie2.grid(row=2, column=1)
    mdp = Entry(connexion)
    Label(connexion, text="Entrez ici votre mot de passse").grid(row=3, column=0)
    mdp.grid(row=4, column=0)

    def connect():
        first_name = saisie1.get()
        last_name = saisie2.get()
        password = mdp.get()
        # Hashing the password using sha256
        hashed_password = hashlib.sha256(password.encode()).hexdigest()
        # Check if the profile exists in the dictionary
        if (first_name + last_name) in profiles:
            if profiles[first_name + last_name] == hashed_password:
                print("Profile trouvé. Bonjour " + first_name + " " + last_name)
        Label(connexion, text="Bonjour " + first_name +
            " " + last_name).grid(row=5, column=0)
        else:   
        print("mot de passe incorrect")
        Label(connexion, text="mot de passe incorrect").grid(row=5, column=0)
        else:
        print("Profile not found")
        Label(connexion, text="Profil non trouvé").grid(row=5, column=0)


    bouton_connect = Button(connexion, text="Connexion", command=connect)
    bouton_connect.grid(row=6, column=0)
    bouton_connect = Button(
        cadre1, text="Se connecter à sa base de données", command=action)
    bouton_create.pack()
    bouton_connect.pack()

Voilà mes 2 codes différents. Je voudrais savoir quel code est selon vous la meilleure base. Et aussi pourquoi sur le second code les 2 else ne marchent sous pretexte que " syntax incorrect" .

Pourriez vous m'éclairer un peu svp. Toute aide est la bienvenue. Merci de votre aide par avance.

EDIT MODERATION : Suppression des informations personnelles

2 réponses

jee pee Messages postés 39655 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 27 avril 2024 9 238
Modifié le 26 janv. 2023 à 21:05

Bonjour,

Une remarque sur la forme de ton code. Soit c'est en publiant que la mise en forme a été modifiée, soit c'est ton source d'origine et alors  tu as soucis dans la gestion de l'indentation du code, paramètre majeur en Python.

Une ligne qui se termine par : constitue un début de bloc, sur des instructions comme def, for, if ... les lignes qui suivent doivent avoir une indentation, et elles doivent être alignées. Le else doit être aligné sur le if dont il dépend.

def xxx():
   if a==b:
      if c==d:
         print()
      else:
         print()
   else:
      print()

1

Salut, qu'entends-tu par gestionnaire de mdp ? Pour gérer tes propres mots de passe comme par exemple keepass*, ou autre chose ?

De toute façon en l'état aucun de tes scripts ne va, tu dois séparer ton gestionnaire de mots de passes du reste, il devrait être aussi bien utilisable en "mode texte" qu'avec une application graphique comme tkinter, Qt, etc.

De plus, il n'y a aucune persistance des données, comment comptes-tu faire ?

En ce qui concerne le code, il y a beaucoup d'incohérences, une fenêtre n'est pas un utilisateur, on n'utilise pas de caractères accentuées dans les identifiants de variables et on les nomme en fonction de ce qu'elles contiennent en éviant aussi le "frangliche", on n'utilise pas comme simple mot de passe le nom et prénom d'une personne... Car c'est ce qui importe ici, tout ce qui concerne tkinter, on s'en balance en fait.

Je te laisse réfléchir à l'utilité de la variable res.

res = entrée1.get(), entrée2.get(), saisie.get()
first_name = res[0]
last_name = res[1]
password = res[2]

Bonne continuation.

0