Je m'attendais slappasswd
à produire un hachage fixe, mais il semble que la sortie soit aléatoire car je n'obtiens jamais la même sortie pour le même mot de passe d'entrée:
$ slappasswd -s secret
{SSHA}mCXsPZkfgQYZr2mKHpy5Iav+2S2XlVU3
$ slappasswd -s secret
{SSHA}62oXsalJBuopYfHhi6hGp6AESuWNIVnd
$ slappasswd -s secret
{SSHA}0Ulc8+ugMi3NbTtWnclOFW1LKCqRdsT8
Pendant l'authentification, comment slapd sait-il comment randomiser le hachage pour le mot de passe fourni de la même manière afin qu'il puisse correspondre au mot de passe défini en premier lieu?
slappasswd
est {SSHA}, ou la version salée de SHA-1.{SSHA}
contient à la fois le sel et le hachage.SSHA est un SHA-1 salé. Par défaut, les 4 derniers octets sont le sel. La sortie de slappasswd est
Donc, pour tester si un mot de passe en texte brut est égal au SHA salé, vous devez:
La chaîne décodée en base64 contient le hachage sous forme binaire et ne peut pas être imprimée, nous allons donc le convertir en hexadécimal avec od. Les 3 premières étapes sont effectuées par le code suivant:
La sortie pourrait être:
Alors maintenant, nous devons concaténer le sel au mot de passe en texte brut et le hacher, cette fois sans salage! Le problème que j'avais était de comprendre que le sel pouvait être n'importe quel caractère, y compris les caractères non imprimables. Afin de concaténer ces caractères non imprimables, nous utiliserons printf et leurs représentations hexadécimales:
La sortie est:
Ce qui est égal au hachage ci-dessus. Maintenant, nous avons vérifié que ce «mot de passe» correspond au SHA salé.
Merci et lecture supplémentaire: http://cpansearch.perl.org/src/GSHANK/Crypt-SaltedHash-0.09/lib/Crypt/SaltedHash.pm
la source