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

WinDev Discussion :

Hashage mot de passe pour vérification [WD19]


Sujet :

WinDev

  1. #1
    Membre à l'essai
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 15
    Points : 15
    Points
    15
    Par défaut Hashage mot de passe pour vérification
    Bonjour,

    Je suis en ce moment occupé à créer une identification utilisateur à partir de OpenLDAP.
    Ne pouvant pas utiliser le groupware (pas pour OpenLDAP) je récupère le mot de passe Hashé d'un utilisateur pour pouvoir le comparer avec celui entré par l'utilisateur.

    Je procède de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    // passFromLDAP  : récupérée au préalable ( {SSHA}XXx0099... )
    	SI passFromLDAP [= "{SSHA}" ALORS
    		passPreDecode est une chaîne = Milieu(passFromLDAP,7)
     
    		passDecode est une chaîne = Décrypte(passPreDecode,"",crypteAucun+compresseAucun,encodeBASE64)
     
    		salt est une chaîne = Droite(passDecode,4)
     
    		temp est une chaîne = HashChaîne(HA_HMAC_SHA_160,cMotDePasse,salt)+salt   // cMotDePasse est le mot de passe entré par l'utilisateur
     
    		passEncoded est une chaîne = Crypte(temp,"",compresseAucun+crypteAucun,encodeBASE64)
     
    	FIN
    Mais la chaine passEncoded ne correspond pas a ce a quoi je m'attendais et je ne parviens pas à trouver de solution.

    (je suis sur des variable cMotDePasse et passFromLDAP)

  2. #2
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    En me basant sur http://aspirine.org/htpasswd_en.html pour générer des pass de tests, le code suivant semble fonctionner.

    Le salt ne fait pas toujours 4 caractères à priori, par contre un hash_160 fait toujours 20 caractères, le salt est donc la partie après les 20 caractères du hash.

    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
    PROCEDURE Test()
    res est un booléen
     
    res  = CheckLdap("123456", "{SHA}fEqNCco3Yq9h5ZUglD3CZJT4lBs=")
    Trace(res ? "Ok"SINON "Pas ok")
     
    res = CheckLdap("123456", "{SSHA}FDuZM0ewCRbH2opD8vExzIdsETbcfRpFE9d1RA==")
    Trace(res ? "Ok"SINON "Pas ok")
     
    PROCEDURE CheckSHA(password est une chaîne, ldapSign est une chaîne) : booléen
    calcSign est une chaîne = CalcSha(password)
    RENVOYER calcSign = "{SHA}" + ldapSign
     
    PROCEDURE CalcSha(password est une chaîne) : chaîne
    str est une chaîne
    str = HashChaîne(HA_SHA_160, password)
    str = Crypte(str, "", compresseAucun+crypteAucun, encodeBASE64)
    RENVOYER "{SHA}" + str
     
    PROCEDURE CheckSSha(password est une chaîne, ldapSign est une chaîne) : booléen
    str est une chaîne
    str = Décrypte(ldapSign, "", compresseAucun+crypteAucun, encodeBASE64)
     
    salt est une chaîne = Droite(str, Taille(str) - 20)
     
    calSign est une chaîne = CalcSSha(password, salt)
    RENVOYER calSign = "{SSHA}" + ldapSign
     
    PROCEDURE CalcSSha(password est une chaîne, salt est une chaîne) : chaîne
    str est une chaîne
    str = HashChaîne(HA_SHA_160, password + salt)
    str = Crypte(str + salt, "", compresseAucun+crypteAucun, encodeBASE64)
    RENVOYER "{SSHA}" + str
     
    PROCEDURE CheckLdap(password est une chaîne, ldapSign est une chaîne)
    res est un booléen
    SI Gauche(ldapSign, 5) = "{SHA}" ALORS
        res = CheckSHA(password, Droite(ldapSign, Taille(ldapSign) - 5))
    SINON SI Gauche(ldapSign, 6) = "{SSHA}" ALORS
        res = CheckSSha(password, Droite(ldapSign, Taille(ldapSign) - 6))
    SINON
        Trace ("Algo inconnu")
        res = Faux
    FIN
     
    RENVOYER res
    Si ce message vous a semblé utile, il est possible qu'il soit utile à d'autres personnes. Pensez au . Et n'oubliez pas le le moment venu !

    On n'a pas à choisir si l'on est pour ou contre la décroissance, elle est inéluctable, elle arrivera qu'on le veuille ou non.

  3. #3
    Membre à l'essai
    Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2010
    Messages : 15
    Points : 15
    Points
    15
    Par défaut
    Oui, ça fonctionne, un grand merci.

    Apparemment je n'utilisais pas la bonne méthode de hashage.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Mot de passe pour delphi
    Par Yannick Villatte dans le forum EDI
    Réponses: 1
    Dernier message: 11/10/2005, 18h39
  2. Réponses: 1
    Dernier message: 17/05/2005, 20h50
  3. Réponses: 3
    Dernier message: 26/01/2005, 07h08
  4. Supprimer le mot de passe pour sa
    Par tripper.dim dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 13/01/2005, 12h13
  5. Réponses: 4
    Dernier message: 29/11/2004, 22h53

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