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

Langage PHP Discussion :

Vérifier un mot de passe sans ordre


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 47
    Par défaut Vérifier un mot de passe sans ordre
    Bonjour, je souhaite vérifier qu'une chaîne ai bien au minimum:

    - une lettre en majuscule
    - une lettre en minuscule
    - un caractères spécial
    - un chiffre

    et que le tout fasse minimum 8 caractères.

    j'ai commencé par faire ça:

    je n'ai pas mis le motif pour les 8 caractères minimum pour le moment.

    Le truc qui me pose problème c'est que apparemment l'ordre compte ! C'est a dire qu'il va chercher un mot de passe avec EN PREMIER au moins un chiffre EN DEUXIÈME au moins une minuscule EN TROISIEME au moins une majuscule etc.. alors que je souhaiterai que mon expression régulière valide un mot de passe sans ce soucié de l'ordre dans lequel sont entrer les caractères.

    je test mes expressions sur : http://www.quanetic.com/Regex

    Je n'ai pas encore trouvé comment faire, je ne suis pas contre un peu d'aide, merci bcp.

  2. #2
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Oui, l'ordre compte, pour faire ceci je te conseilles de scinder ta regex en plusieurs sous regex :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if(preg_match('#...#', $chaine) && preg_match('#...#', $chaine) && ...)
       echo 'chaine valide';
    else
       echo 'chaine invalide';

  3. #3
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 47
    Par défaut
    Merci de ta réponse Madfrix, mais l'expression régulière que j'attends doit être stocké dans un seul champs en BDD, et du coup je doit avoir une seule expression qui fasse tout ça.

    Le code php ( que je ne peux pas modifier ) récupére l'expression dans mysql et fait un preg_match.

    Je ne peux donc pas faire plusieurs preg_match(..), c'est vraiment pas possible de tout mettre dans une seule regex ?

    Merci.

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    453
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 453
    Par défaut
    Salut,

    Je ne te conseillerais pas de tout faire en une seule regex, car c'est vraiment lourd. Tu peux très bien stocker un array serialisé dans ta BDD, pour stocker plusieurs regex.
    Par contre je me suis quand même penché sur le problème de tout faire en une seule regex, parce que je le trouve assez intéressant.
    Le seul problème que je n'ai pas réussi à résoudre, c'est le minimum de 8 caractères. Tu pourras éventuellement le stocker dans ta BDD, mais je n'ai pas trouvé le moyen de le mettre dans la regex.

    Tu veux que la chaîne soit composée de :
    1 lettre minuscule (Min)
    1 lettre majuscule (Max)
    1 chiffre (Chif)
    1 symbole non alphanumérique (Sym)

    En permutant on obtient les (4)! = 24 possibilités suivantes :
    Min-Maj-Chif-Sym
    Min-Maj-Sym-Chif
    Min-Chif-Maj-Sym
    Min-Chif-Sym-Maj
    Min-Sym-Maj-Chif
    Min-Sym-Chif-Maj

    Maj-Min-Chif-Sym
    Maj-Min-Sym-Chif
    Maj-Chif-Min-Sym
    Maj-Chif-Sym-Min
    Maj-Sym-Chif-Min
    Maj-Sym-Min-Chif

    Chif-Min-Maj-Sym
    Chif-Min-Sym-Maj
    Chif-Maj-Min-Sym
    Chif-Maj-Sym-Min
    Chif-Sym-Min-Maj
    Chif-Sym-Maj-Min

    Sym-Min-Maj-Chif
    Sym-Min-Chif-Maj
    Sym-Maj-Min-Chif
    Sym-Maj-Chif-Sym
    Sym-Chif-Min-Maj
    Sym-Chif-Maj-Min

    En mettant tout ça dans une même regex on obtient :

    #(?:MinMajChifSym|MinMajSymChif|MinChifMajSym|MinChifSymMaj|MinSymMajChif|MinSymChifMaj|MajMinChifSym|MajMinSymChif|MajChifMinSym|MajChifSymMin|MajSymChifMin|ManSymMinChif|ChifMinMajSym|ChifMinSymMaj|ChifMajMinSym|ChifMajSymMin|ChifSymMinMaj|ChifSymMajMin|SymMinMajChif|SymMinChifMaj|SymMajMinChif|SymMajChifMin|SymChifMinMaj|SymChifMajMin)#

    Soit en remplacent les lettres par leur vrai symbole :

    #(?:[a-z]+.*[A-Z]+.*[0-9]+.*[^a-zA-Z0-9]+|[a-z]+.*[A-Z]+.*[^a-zA-Z0-9]+.*[0-9]+|[a-z]+.*[0-9]+.*[A-Z]+.*[^a-zA-Z0-9]+|[a-z]+.*[0-9]+.*[^a-zA-Z0-9]+.*[A-Z]+|[a-z]+.*[^a-zA-Z0-9]+.*[A-Z]+.*[0-9]+|[a-z]+.*[^a-zA-Z0-9]+.*[0-9]+.*[A-Z]+|[A-Z]+.*[a-z]+.*[0-9]+.*[^a-zA-Z0-9]+|[A-Z]+.*[a-z]+.*[^a-zA-Z0-9]+.*[0-9]+|[A-Z]+.*[0-9]+.*[a-z]+.*[^a-zA-Z0-9]+|[A-Z]+.*[0-9]+.*[^a-zA-Z0-9]+.*[a-z]+|[A-Z]+.*[^a-zA-Z0-9]+.*[0-9]+.*[a-z]+|[A-Z]+.*[^a-zA-Z0-9]+.*[a-z]+.*[0-9]+|[0-9]+.*[a-z]+.*[A-Z]+.*[^a-zA-Z0-9]+|[0-9]+.*[a-z]+.*[^a-zA-Z0-9]+.*[A-Z]+|[0-9]+.*[A-Z]+.*[a-z]+.*[^a-zA-Z0-9]+|[0-9]+.*[A-Z]+.*[^a-zA-Z0-9]+.*[a-z]+|[0-9]+.*[^a-zA-Z0-9]+.*[a-z]+.*[A-Z]+|[0-9]+.*[^a-zA-Z0-9]+.*[A-Z]+.*[a-z]+|[^a-zA-Z0-9]+.*[a-z]+.*[A-Z]+.*[0-9]+|[^a-zA-Z0-9]+.*[a-z]+.*[0-9]+.*[A-Z]+|[^a-zA-Z0-9]+.*[A-Z]+.*[a-z]+.*[0-9]+|[^a-zA-Z0-9]+.*[A-Z]+.*[0-9]+.*[a-z]+|[^a-zA-Z0-9]+.*[0-9]+.*[a-z]+.*[A-Z]+|[^a-zA-Z0-9]+.*[0-9]+.*[A-Z]+.*[a-z]+.*)#

    C'est une regex énorme, mais elle marche.
    Par contre, si tu peux t'organiser autrement pour tester avec plusieurs regex, fais le.

  5. #5
    Membre Expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Par défaut
    Bonjour,

    Ce test étant le même pour tous les mots de passe, pourquoi devrait-il être stocké en BDD ?
    La seule raison valable à un stockage en base serait que ce test soit éventuellement modifiable en ligne, et je n'en vois pas l'utilité...

  6. #6
    Membre averti
    Inscrit en
    Novembre 2006
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 47
    Par défaut
    Merci de vos reponse, je vais voir si j'ai assez de place pour stocké ça dans ma bdd, et surtout essayé de comprendre lol
    merci sachav.

    s.n.a.f.u : pour configuré une politique de mot de passe différentes selon les clients.

Discussions similaires

  1. Vérifier le mot de passe administrateur
    Par sitirna dans le forum C++Builder
    Réponses: 4
    Dernier message: 25/02/2008, 21h47
  2. Changer mot de passe sans connaître l'ancien
    Par luckan dans le forum ASP.NET
    Réponses: 3
    Dernier message: 25/06/2007, 19h12
  3. Vérifier un mot de passe..
    Par Fred2209 dans le forum Visual C++
    Réponses: 1
    Dernier message: 08/01/2007, 21h26
  4. Bloquer le pc avec un mot de passe sans quiter la session
    Par paterson dans le forum Windows XP
    Réponses: 2
    Dernier message: 11/11/2006, 21h16

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