IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Tkinter Python Discussion :

[Demande d'aide] Authentification


Sujet :

Tkinter Python

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 5
    Points : 1
    Points
    1
    Par défaut [Demande d'aide] Authentification
    Bonjour,

    Je suis débutant en python et j'essaye de créer un petit programme permettant d'utiliser des mot de passe et de les comparer mais j'ai un problème lorsque j'execute celui-ci, il marche très bien lorsque je n'utilise pas Tkinter mais lorsque je l'utilise et que je met des mots de passe identiques il ne les reconnaît pas
    Voici mon code: (le label "call" me permettait de vérifier que ma variable password fonctionnait)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
     
    import sys
    import uuid
    import hashlib
    from Tkinter import *
    from tkMessageBox import *
     
    def hpassw(password):
    	"""Permet hacher votre mot de passe"""
    	salt = uuid.uuid4().hex
    	return hashlib.sha1(salt.encode() + password.encode()).hexdigest()+ ':' + salt 
     
    def check_pass(hashed_password, user_password):
    	password, salt = hashed_password.split(':')
    	return password == hashlib.sha1(salt.encode() + user_password.encode()).hexdigest()
     
    def check(hashed_password, user_password):
    	"""Check le mot  de passe entré dans le Gui"""
    	password, salt = hashed_password.split(':')
    	if check_pass(hashed_pass, user_password):
    		# le mot de passe est bon : on affiche une boîte de dialogue puis on ferme la fenêtre
    		showinfo('Résultat','Mot de passe correct.\nAu revoir !')
    		Window.destroy()
    	else:
    		# le mot de passe est incorrect : on affiche une boîte de dialogue
    		showwarning('Résultat','Mot de passe incorrect.\nVeuillez recommencer !')
    		mdp.set('')
     
     
    new_password = raw_input("Entrez votre mot de passe:\n")
    hashed_pass = hpassw(new_password)
     
    Window = Tk()
    Window.title('Authentification')
     
     
    Label1 = Label(Window, text = 'Mot de passe')
    Label1.pack(side = LEFT, padx = 5, pady = 5)
     
    mdp = StringVar()
    Champ = Entry(Window, textvariable = mdp, show='*', bg = 'bisque', fg='maroon')
    Champ.focus_set()
    Champ.pack(side = LEFT, padx = 5, pady = 5)
     
    password = mdp.get()
     
    Valider = Button(Window, text='Valider', command=lambda: check(hashed_pass, password))
    Valider.pack(side = LEFT, padx= 5, pady=5)
     
    Exit = Button(Window, text='Quitter', command=Window.destroy)
    Exit.pack(side= LEFT, padx=5, pady = 5)
     
     
    call = Label(Window, textvariable =mdp, fg='bisque', bg='green')
    call.pack(side = LEFT, padx = 5, pady = 5)
     
     
    Window.mainloop()
    Merci pour votre aide !

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par M4gie Voir le message
    Il marche très bien lorsque je n'utilise pas Tkinter mais lorsque je l'utilise et que je met des mots de passe identiques il ne les reconnaît pas
    Il faut commencer par vérifier que le callback "check" reçoit bien les chaînes de caractères attendues.
    Pour çà ajouter un "print" devrait suffire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def check(hashed_password, user_password):
    	"""Check le mot  de passe entré dans le Gui"""
            print('hashed_password:', hashed_password, 'user_password:', user_password)
    	password, salt = hashed_password.split(':')
            ...
    Puis vous réfléchissez au pourquoi ils ne sont pas ceux attendus.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Il faut commencer par vérifier que le callback "check" reçoit bien les chaînes de caractères attendues.
    Pour çà ajouter un "print" devrait suffire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    def check(hashed_password, user_password):
    	"""Check le mot  de passe entré dans le Gui"""
            print('hashed_password:', hashed_password, 'user_password:', user_password)
    	password, salt = hashed_password.split(':')
            ...
    Puis vous réfléchissez au pourquoi ils ne sont pas ceux attendus.

    - W
    J'ai effectué cet ajout et il m'a permit de remarqué ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ('hashed_password:', '3604e68df8079bbbfaf702cfac00e6dc83705bbf:fcf8fef21bd44deb814a6a182b31da42', 'user_password:', '')
    Donc on peut voir que la variable user_password est vide je vais chercher un peut pourquoi

    Merci pour votre aide

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Je n'ai toujours pas trouvé de solution donc si quelqu'un pense avoir une solution, il est le bienvenue

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Citation Envoyé par M4gie Voir le message
    Je n'ai toujours pas trouvé de solution donc si quelqu'un pense avoir une solution, il est le bienvenue
    Pour trouver une solution, il faut commencer par comprendre le problème.
    Lorsque vous écrivez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    password = mdp.get()
     
    Valider = Button(Window, text='Valider', command=lambda: check(hashed_pass, password))
    "password" est initialisé avec le contenu de la StringVar "mdp" et avant que celui ci ait été modifié par l'utilisateur. Et donc vous ne testez pas ce qui a été saisi mais une chaîne vide. Pour que çà fonctionne vous pourriez écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Valider = Button(Window, text='Valider', command=lambda: check(hashed_pass, mdp.get()))
    ou éviter d'utiliser le "lambda" et récupérer les variables globales dans "check" (ce que vous faîtes déjà pour "mdp" lorsque vous le remettez à "").

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Pour trouver une solution, il faut commencer par comprendre le problème.
    Lorsque vous écrivez:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    password = mdp.get()
     
    Valider = Button(Window, text='Valider', command=lambda: check(hashed_pass, password))
    "password" est initialisé avec le contenu de la StringVar "mdp" et avant que celui ci ait été modifié par l'utilisateur. Et donc vous ne testez pas ce qui a été saisi mais une chaîne vide. Pour que çà fonctionne vous pourriez écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Valider = Button(Window, text='Valider', command=lambda: check(hashed_pass, mdp.get()))
    ou éviter d'utiliser le "lambda" et récupérer les variables globales dans "check" (ce que vous faîtes déjà pour "mdp" lorsque vous le remettez à "").

    - W
    D'accord donc pour qu'il prenne en compte les modification effectuée je dois faire une sorte que lorsque l'on clique sur le boutton valider il récupère le nouveau contenu de la chaîne?

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2016
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2016
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    J'ai compris merci pour ton aide !

    Voici mon programme fonctionnel

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
     
    import sys
    import uuid
    import hashlib
    from Tkinter import *
    from tkMessageBox import *
     
    def hpassw(password):
    	"""Permet hacher votre mot de passe"""
    	salt = uuid.uuid4().hex
    	return hashlib.sha1(salt.encode() + password.encode()).hexdigest()+ ':' + salt 
     
    def check_pass(hashed_password, user_password):
    	password, salt = hashed_password.split(':')
    	return password == hashlib.sha1(salt.encode() + user_password.encode()).hexdigest()
     
    def check(hashed_password):
    	"""Check le mot  de passe entré dans le Gui"""
    	user_password = mdp.get()
    	print('hashed_password:', hashed_password, 'user_password:', user_password)
    	password, salt = hashed_password.split(':')
    	if check_pass(hashed_pass, user_password):
    		# le mot de passe est bon : on affiche une boîte de dialogue puis on ferme la fenêtre
    		showinfo('Résultat','Mot de passe correct.\nAu revoir !')
    		Window.destroy()
    	else:
    		# le mot de passe est incorrect : on affiche une boîte de dialogue
    		showwarning('Résultat','Mot de passe incorrect.\nVeuillez recommencer !')
    		mdp.set('')
     
    new_password = raw_input("Entrez votre mot de passe:\n")
    hashed_pass = hpassw(new_password)
     
    Window = Tk()
    Window.title('Authentification')
     
     
    Label1 = Label(Window, text = 'Mot de passe')
    Label1.pack(side = LEFT, padx = 5, pady = 5)
     
    mdp = StringVar()
    Champ = Entry(Window, textvariable = mdp, width=7, justify=CENTER, bg = 'bisque', fg='maroon')
    Champ.focus_set()
    Champ.pack(side = LEFT, padx = 5, pady = 5)
     
     
    Valider = Button(Window, text='Valider', command=lambda: check(hashed_pass))
    Valider.pack(side = LEFT, padx= 5, pady=5)
     
    Exit = Button(Window, text='Quitter', command=Window.destroy)
    Exit.pack(side= LEFT, padx=5, pady = 5)
     
    Window.mainloop()

Discussions similaires

  1. Demande d'aide pour query difficile
    Par ericjean514 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 22/02/2005, 18h52
  2. Demande d'aide pour une requête
    Par arkzor dans le forum Requêtes
    Réponses: 3
    Dernier message: 28/12/2004, 02h40
  3. demande d'aide sur samba
    Par marcoss dans le forum Développement
    Réponses: 5
    Dernier message: 04/12/2003, 19h38
  4. [TPW][cours]Demande d'aide pour finir un programme
    Par jf dans le forum Turbo Pascal
    Réponses: 21
    Dernier message: 16/06/2003, 18h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo