
Fonctionne en version WebDev 23
Je vous partage mes trois procédures qui permettent de générer des mots de passe à chaine aléatoire en UNICODE, de plus j'ai ajouté la notion de "Cacher le Salt", n'hésitez pas à commenter, à aider et à améliorer, cela peut aider bon nombre d'entre nous et inutile de réinventer la roue à chaque fois.
Fonctionnement :
Vous devez définir la longueur de la chaine de salage, puis choisir la place à laquelle vous allez l'insérer en partant de la gauche
nNbCaratereSalt est un entier = 8
nPositionSalt est un entier = 4
Génération d'un Token
PROCÉDURE TokenChaine(nN)
InitHasard()
sChaîneAléatoire est une chaîne
BOUCLE (nN)
nCaractère est un entier = Hasard(65,122)
TANTQUE (91 <= nCaractère <= 96)
nCaractère = Hasard(65,122)
FIN
sChaîneAléatoire += Caract(nCaractère)
FIN
RENVOYER sChaîneAléatoire
Génération d'un mot de passe
PROCÉDURE GenPassword(sPass est une chaîne UNICODE)
nNbCaratereSalt est un entier = 8
nPositionSalt est un entier = 4
sChaineCrype est une chaîne UNICODE
sSalt est une chaîne = TokenChaine(nNbCaratereSalt)
bufHash_Binaire est un Buffer = HashChaîne(HA_HMAC_SHA_160, sPass+sSalt, sSalt)
sHash_Hexa est une chaîne
POUR nIndice = 1 _À_ Taille(bufHash_Binaire)
sHash_Hexa += NumériqueVersChaîne(Asc(bufHash_Binaire[[nIndice]]),"02x")
FIN
sHashDecrypt est une chaîne = Crypte(sHash_Hexa, "", crypteRapide + compresseChaîneCourte, encodeBASE64)
sHashDecrypt = Remplace(sHashDecrypt,RC,"")
sChaineCrype = Gauche(sHashDecrypt,nPositionSalt)+sSalt+Milieu(sHashDecrypt,nPositionSalt+1)
RENVOYER sChaineCrype
et pour vérifier le mot de passe :
PROCÉDURE VerifPassword(sHashVerif est une chaîne UNICODE, sPass est une chaîne UNICODE)
nNbCaratereSalt est un entier = 8
nPositionSalt est un entier = 4
sChaineCrype est une chaîne UNICODE = Gauche(sHashVerif, nPositionSalt)
sSalt est une chaîne UNICODE = Milieu(sHashVerif, nPositionSalt + 1, 8)
sHash est une chaîne UNICODE = sChaineCrype + Milieu(sHashVerif, nPositionSalt + nNbCaratereSalt+1)
sHashDecrypt est une chaîne UNICODE = Décrypte(sHash, "", crypteRapide + compresseChaîneCourte, encodeBASE64)
bufHash_Binaire est un Buffer
POUR nInd = 1 _À_ Taille(sHashDecrypt) PAS 2
bufHash_Binaire += Caract(Val(sHashDecrypt[[nInd SUR 2]], "x"))
FIN
SI HashVérifieChaîne(HA_HMAC_SHA_160, sPass+sSalt, bufHash_Binaire, sSalt) = Vrai ALORS
RENVOYER Vrai
SINON
RENVOYER Faux
FIN
Avec cette méthode, vous n'aurez jamais dans votre base la même chaine de caractères pour vos mots de passe.
Bon dev ;)
|