Partage
  • Partager sur Facebook
  • Partager sur Twitter

Verificateur de mot de passe

    15 décembre 2021 à 17:48:32

    Bonjour, je suis entrain d faire un mini projet qui consiste a faire un verificateur de mot de passe avec un generateur et c'est a rendre pour vendredi. j ai un probleme c'est que je ne c pas d'ou vien une erreur (enfin je pense que c soit dans la fonction recherche_cs() ou dans verif() ) tous marche bien j'ai reussi a verifier le caractère le probleme c'est que quad je lance la fonction que je genere puis ue je le vérifie et enfait il y a cette phrase "Le mot de passe doit contenir au moins un caractère spécial." qui apparait alors que sa devrait être celle ci "Le mot de passe correspond.".

    from tkinter import *
    
    import tkinter as tk
    
    
    
    from random import randint
    
    
    
    nb_caractere = randint(6, 12)
    
    minuscule = "abcdefghijklmnopqrstuvwxyz" 
    
    chif = "0123456789"
    
    cs = "€£$@!:;,?./%&~#-_§+-*=<>°^`"
    
    l_maj = "ABCDEFGHIJKLMOPQRSTUVWXYZ"
    
    
    
    def genere_mdp():
    
        """
    
        fonction permettant de generer un mot de passe aléatoirement
    
    
    
        Returns
    
        -------
    
        None.
    
    
    
        """
    
        mdp = ''
    
        compteur = 0
    
        while compteur != nb_caractere:# boucle tanque nb_charactere_genenere est different de nb_charactere
    
            lettre_min = minuscule
    
            choisir_lettre_min = lettre_min[ len(lettre_min) - randint(1,26)]
    
            #génère une lettre miuscule au hazard
    
            lettre_maj = l_maj
    
            choisir_lettre_maj = lettre_maj[ len(lettre_maj) - randint(1,26)]
    
            # génère une lettre majuscule au hazard
    
    
    
            chiffre = chif
    
            choisir_chiffre = chiffre[ len(chiffre) - randint(1,10) ]
    
            # génère une chiffre au hazard
    
            caractere_speciaux = cs
    
            choisir_caractere_speciaux = caractere_speciaux[ len(caractere_speciaux) - randint(1,27) ] # génère un caractere spécial au hazard
    
            all_chars = choisir_caractere_speciaux + choisir_lettre_maj + choisir_chiffre + choisir_lettre_min
    
            password = all_chars[len(all_chars) - randint(1,4)] 
    
            # génère un charactere au hazard entre la lettre minuscule generer, la lettre majuscule générer, le chiffre generer ou le caractere special generer
    
            for pw in password : # défini pw par le charactère génerer juste avant
    
                mdp += pw #  pw est ajouter a mdp
    
                compteur += 1 
    
                # on ajoute 1 au compteur pour pas que le mot de passe soit infini
    
                saisir_mdp.delete(0 , END) 
    
                saisir_mdp.insert(0, mdp)  
    
    
    
    
    
    #creer une nouvelle fenêtre
    
    wd = tk.Tk()
    
    wd.title("Générateur de mot de passe")
    
    wd.geometry("1080x600")
    
    wd.iconbitmap("logo.ico")
    
    wd.config(bg="white")
    
    
    
    #creation d'une frame
    
    frame = Frame(wd,bg = 'white', bd = 4, height = 700, width = 700)
    
    frame.pack(expand = "YES")
    
    
    
    
    
    #creation d'une zone de texte pour l'identifiant
    
    demande_ident = Label(frame, bg = 'white', 
    
                          text = "Entrez votre identifiant :",
    
                          font = ('eras bold itc', 24))
    
    demande_ident.grid(row = 0)
    
    #creation d'une zone de saisi pour le mot de passe
    
    
    
    saisir_ident = tk.Entry(frame)
    
    saisir_ident.config(bd = 4, relief = 'groove', font = ('eras bold itc', 14))
    
    saisir_ident.grid(row = 1)
    
    
    
    #creation d'une zone de texte pour le mot de passe
    
    demande_mdp = Label(frame, bg = 'white', 
    
                        text = "Entrez votre mot de passe ou génère le :", 
    
                        font = ('eras bold itc', 24))
    
    demande_mdp.grid(row = 2)
    
    
    
    #creation d'une zone de saisi pour le mot de passe
    
    
    
    var_mdp = StringVar()
    
    text_verif = StringVar()
    
    textmodif = StringVar()
    
    def longueur_mdp():
    
        """
    
        fonction permettant de verifier si le nombre de caractère \
    
            contenue dans le mot de passe est le même ou si le mot \
    
                de passe est trop court ou trop long
    
    
    
        Returns
    
        -------
    
        None.
    
    
    
        """
    
        if len(var_mdp.get()) < 6:
    
            textmodif.set("Le mot de passe est trop court, il doit contenir entre 6 \n et 12 caractères.")
    
            message.config(fg = 'red')            
    
        elif len(var_mdp.get()) > 12:
    
            textmodif.set("Le mot de passe est trop long, il doit contenir entre 6 \n et 12 caractères.")
    
            message.config(fg = 'red') 
    
        elif len(var_mdp.get()) != len(text_verif.get()):
    
            textmodif.set("Le mot de passe ne contient pas le même nombre de caractère.")
    
            message.config(fg = 'red')
    
    def correct(): 
    
        """
    
        fonction permettant de verifier si le mot de passe dans la zone de saisie \
    
            est le même que celui dans la zone de saisie pour le vérifier
    
    
    
        Returns
    
        -------
    
        None.
    
    
    
        """
    
        mdp_verif = text_verif.get()
    
        mdp = var_mdp.get()
    
        if mdp == mdp_verif:
    
           textmodif.set("Le mot de passe correspond.")
    
           message.config(fg = 'green')
    
        else:
    
            textmodif.set("Le mot de passe ne correspond pas.")
    
            message.config(fg = 'red')
    
    def recherche_minuscule(): 
    
        mdp = var_mdp.get()
    
        l = 0
    
        i = minuscule[0]
    
        compteur = 0
    
        while compteur != 1:
    
            if i in mdp:
    
                compteur = 1
    
            elif l > 27:
    
                break
    
            else:
    
                l += 1
    
                i = minuscule[l]
    
            textmodif.set("Le mot de passe doit contenir au moins une minuscule.")
    
            message.config(fg = 'red')
    
    
    
    
    
    def recherche_majuscule(): 
    
        mdp = var_mdp.get()
    
        l = 0
    
        i = l_maj[0]
    
        compteur = 0
    
        while compteur != 1:
    
            if i in mdp:
    
                compteur = 1
    
            elif l > 27:
    
                break
    
            else:
    
                l += 1
    
                i = l_maj[l]
    
            textmodif.set("Le mot de passe doit contenir au moins une majuscule.")
    
            message.config(fg = 'red')
    
    def recherche_chiffre(): 
    
        mdp = var_mdp.get()
    
        l = 0
    
        i = chif[0]
    
        compteur = 0
    
        while compteur != 1:
    
            if i in mdp:
    
                compteur = 1
    
            elif l > 11:
    
                break
    
            else:
    
                l += 1
    
                i = chif[l]
    
            textmodif.set("Le mot de passe doit contenir au moins un chiffre.")
    
            message.config(fg = 'red')
    
    
    
    def recherche_cs(): 
    
        mdp = var_mdp.get()
    
        l = 0
    
        i = cs[0]
    
        compteur = 0
    
        while compteur != 1:
    
            if i in mdp:
    
                compteur = 1
    
            elif l > 28:
    
                break
    
            else:
    
                l += 1
    
                i = cs[l]
    
                textmodif.set("Le mot de passe doit contenir au moins un caractère spécial.")
    
                message.config(fg = 'red')
    
    def verif():
    
        """
    
        fonction permettant de verifier la longueur du mot de passe les caractere
    
    
    
        Returns
    
        -------
    
        None.
    
    
    
        """
    
        correct()
    
        longueur_mdp()
    
        recherche_minuscule()
    
        recherche_majuscule()
    
        recherche_chiffre()
    
        recherche_cs()
    
    saisir_mdp = tk.Entry(frame)
    
    saisir_mdp.config(show = "•",bd = 4, 
    
                      relief = 'groove', textvariable = var_mdp, font = ('eras bold itc', 14))
    
    saisir_mdp.grid(row = 3)
    
    
    
    #creation d'une zone de texte pour la vérification du mot de passe
    
    demande_mdp_verif = Label(frame, bg = 'white', 
    
                              text = "Entrez votre mot de passe à vérifier :",
    
                              font = ('eras bold itc', 15))
    
    demande_mdp_verif.grid(row = 4)
    
    #creation d'une zone de saisi pour le mot de passe
    
    saisir_mdp_verif = tk.Entry(frame)
    
    saisir_mdp_verif.config(show = '•',bd = 4, relief = 'groove', 
    
                            font = ('eras bold itc', 14), textvariable = text_verif)
    
    saisir_mdp_verif.grid(row = 5)
    
    
    
    #creation du bouton pour générer le mdp
    
    generer_mdp = tk.Button(frame, text = "Générer le mot de passe", 
    
                            font = ('eras bold itc', 10), relief = 'groove',
    
                            bd = 4, command = lambda : genere_mdp())
    
    generer_mdp.grid(row = 5, column = 1)
    
    
    
    message = Label(frame, text = "v",bg = 'white', font = ('eras bold itc', 10), fg = 'red', textvariable = textmodif)
    
    message.grid(row = 6)
    
    
    
    #creation du bouton pour vérifier le mdp
    
    verifier_mdp = tk.Button(frame, text = "Vérifier le mot de passe",
    
                             padx = 3, font = ('eras bold itc', 10), 
    
                             relief = 'groove', bd = 4, command = lambda : verif())
    
    verifier_mdp.grid(row = 6, column = 1)
    
    
    
    #creation d'une zone de texte pour les checkbutton 
    
    demande_checkbutton = Label(frame, bg = 'white',
    
                                text = "Quelles charactère voulez-vous dans votre mot de passe ?",
    
                                font = ('eras bold itc', 15))
    
    demande_checkbutton.grid(row = 7)
    
    
    
    #creation des cases à cocher
    
    
    
    
    
    var_affiche = IntVar()
    
    var_text = StringVar()
    
    var_text.set('Afficher le mot de passe')
    
    
    
    def affiche():
    
        if var_affiche.get() == 1 :
    
            saisir_mdp.config(show = '')
    
            saisir_mdp_verif.config(show = '')
    
            var_text.set("Masquer le mot de passe")
    
        else:
    
            saisir_mdp.config(show = '•')
    
            saisir_mdp_verif.config(show = '•')
    
            var_text.set( "Afficher le mot de passe")   
    
    demande_aff = Checkbutton ( frame, variable = var_affiche, text = "Afficher le mot de passe",
    
                             bd = 4, relief = 'groove',padx = 2, bg = 'white', 
    
                             font = ('eras bold itc', 11), textvariable = var_text, command= affiche)
    
    demande_aff.grid(row = 9, column = 1)
    
    
    
    
    
    #afficher la fenêtre
    
    wd.mainloop()



    -
    Edité par BZHKylian 15 décembre 2021 à 20:05:40

    • Partager sur Facebook
    • Partager sur Twitter
      15 décembre 2021 à 18:37:26

      Pour les fonctions de recherche, je ferais:
      mdpt = mdp
      for c in cs:
          if c in mdpt:
              mdpt = mdpt.replace(c, '')
      if len(mdp) - len(mdpt) < une_certaine_limite:
         # afficher erreur
      • Partager sur Facebook
      • Partager sur Twitter

      Le Tout est souvent plus grand que la somme de ses parties.

        15 décembre 2021 à 18:44:26

        Bonjour, Merci de supprimer la notion d'urgence dans le titre de votre sujet.

        Pas d'urgence sur ce forum

        Vous êtes sur un forum d'entraide, pas sur un site de service. Ici les intervenants vous répondent quand ils le veulent, s'ils le veulent, sans aucune obligation. Aussi, ce genre d'indications rendent le forum moins agréable à utiliser et moins équitable. De ce fait, les mentions de quelconque "urgence" ne sont pas admises sur ce forum. La meilleure façon d'avoir de l'aide rapidement ici est de fournir toutes les informations nécessaires et de les présenter correctement. N'hésitez pas à lire les règles épinglés en haut des sections du forum, elles indiquent généralement ce qui est nécessaire.

        Liens conseillés

        • Partager sur Facebook
        • Partager sur Twitter
          15 décembre 2021 à 19:03:11

          Salut !

          En effet, pas d'urgence ici, ça ne donne pas envie d'aider...

          Bref, pour vérifier s'il y a les caractères qu'il faut c'est pas très compliqué :

          >>> mdp = "abcd"
          >>> chiffre = "".join(str(i) for i in range(0,10))
          >>> import string
          >>> dico = {'nb de chiffres':0,'nb de caractères spéciaux':0,'nb de miniscule':0,'nb de majuscule':0}
          >>> for l in mdp:
          	if l in string.ascii_lowercase:
          		dico['nb de miniscule']+=1
          	elif l in string.ascii_uppercase:
          		dico['nb de majuscule']+=1
          	elif l in chiffre:
          		dico['nb de chiffres']+=1
          	else:
          		dico['nb de caractères spéciaux']+=1
          
          		
          >>> dico
          {'nb de chiffres': 0, 'nb de caractères spéciaux': 0, 'nb de miniscule': 4, 'nb de majuscule': 0}

          Fait en 30 secondes avec fautes d'orthographe en prime, histoire de rester dans le thème...

          -
          Edité par ErispoeLeNarvalo 15 décembre 2021 à 19:34:02

          • Partager sur Facebook
          • Partager sur Twitter
            15 décembre 2021 à 19:14:50

            Et on peut même remplacer le else par if l in cs:
            et pourquoi pas une case pour "le reste".
            On peut tout vérifier dans la même fonction.
            Si on est un peu tordu, on peut mettre la limite pour chacun et l'ensemble concerné dans le dictionnaire.

            -
            Edité par PierrotLeFou 15 décembre 2021 à 19:17:44

            • Partager sur Facebook
            • Partager sur Twitter

            Le Tout est souvent plus grand que la somme de ses parties.

              15 décembre 2021 à 19:22:46

              teste fonction par fonction dans verif.

              il y a la vérification  de la présence de minuscule (et les autres qui suivent le même principe) qui marche mal: même si il y a une minuscule, le message d'erreur peut apparaitre (il manque un test à la sortie de la boucle et le message est mal indenté, il apparait systématiquement ); pour les caractères spéciaux, l'indentation est différente et le message apparait si le 1er caractère du mot de passe n'est pas un caractère spécial

              -
              Edité par umfred 15 décembre 2021 à 19:23:15

              • Partager sur Facebook
              • Partager sur Twitter

              Verificateur de mot de passe

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              • Editeur
              • Markdown