[RESOLU] Comment fonctionne crypt()

bjink
Invité n'ayant pas de compte PHPfrance

02 nov. 2015, 14:13

Bonjour,

Je voudrais comprendre comment fonctionne la fonction crypt(), que j'utilise (sans problème) pour protéger les mots de passe stockés dans .htpasswd :
utilisateur:motdepasse_crypté

L'accès au site est contrôlé via .htaccess par instructions de type :
AuthName "Message"
AuthType Basic
AuthUserFile "/repertoire/.htpasswd"
Require valid-user

Si - pour obtenit le motdepasse_crypté que je vais stocker dans htpasswd - j'utilise crypt() avec un sel, j'obtiens un chiffrement qui commencent par le sel. Dès lors je comprends comment le système peut fonctionner : le serveur lit le mot de passe entré par utilisateur, calcule motdepasse_crypté puis le compare à celui-ci stocké dans htpasswd. En effet, utilisé avec un sel, crypt() donne toujours le même résultat.

Mais utilisé sans sel, crypt() donne un résultat différent chaque fois qu'on l'applique sur un même mot de passe. Et pourtant dans ce cas, je constate que le serveur arrive pourtant à vérifier si le mot de passe entré par l'utilisateur est bien celui encrypté dans htpasswd !

Comment cela est-il possible ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

02 nov. 2015, 15:14

Bonjour,
Mais utilisé sans sel, crypt() donne un résultat différent chaque fois qu'on l'applique sur un même mot de passe. Et pourtant dans ce cas, je constate que le serveur arrive pourtant à vérifier si le mot de passe entré par l'utilisateur est bien celui encrypté dans htpasswd !

Comment cela est-il possible ?
Image

:D



Plus sérieusement, en fait quand on utilise crypt sans salt, il va générer le salt lui même et le concaténer au début du mdp généré.

Exemple :
<?php
echo crypt('toto');
// va donner par exemple : $1$l8lY733i$SOydDPHlIrK8SZnNKOhC50
Et le salt est là :
$1$l8lY733i$SOydDPHlIrK8SZnNKOhC50

Vérification :
<?php
echo crypt('toto', '$1$l8lY733i$');
// on obtient bien : $1$l8lY733i$SOydDPHlIrK8SZnNKOhC50
Quand tout le reste a échoué, lisez le mode d'emploi...

bjink
Invité n'ayant pas de compte PHPfrance

03 nov. 2015, 17:33

Merci @rthur, t'es un king ;)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9783 Messages

03 nov. 2015, 17:42

;-)
Quand tout le reste a échoué, lisez le mode d'emploi...