(je ne suis pas au courant CS50. Je réponds à cette question en supposant que crypt
est la fonction crypt(3)
de la bibliothèque standard Unix traditionnelle C.)
crypt
est un très vieux fonction, à partir des jours avant que quiconque s'inquiète de thread-sécurité en C. Chaque fois que vous l'appelez, il renvoie le même pointeur, pointant vers un tampon statique dans la bibliothèque C. Chaque appel écrase le résultat de tout appel précédent.
Si vous imprimez le résultat du premier appel crypt
avant d'appeler à nouveau ...
#include <stdio.h>
#include <unistd.h>
int
main(void)
{
char password[] = "AAAA";
char toCrack[] = "AAzz";
printf("%s\n", password);
printf("%s\n", toCrack);
char *toCrackCiph = crypt(toCrack, "da");
printf("%s\n", toCrackCiph);
char *passwordCiph = crypt(password, "aa");
printf("%s\n", passwordCiph);
return 0;
}
... vous verrez deux chaînes différentes. La sortie sur mon ordinateur est
AAAA
AAzz
daeBW5vt16USo
aaI8pRQwCn7N2
Puisque vous utilisez des chaînes de sel qui demandent l'ancien algorithme de hachage de mot de passe à base-DES, vous devriez obtenir la même chose. Ceci est un exercice en classe, mais je dois quand même souligner que l'ancien hachage de mot de passe basé sur DES peut être brisé par force brute sur n'importe quel ordinateur moderne, donc il ne devrait jamais être utilisé pour de vrais mots de passe. Vous pouvez probablement obtenir un meilleur algorithme à utiliser en spécifiant un style différent de chaîne de sel, quelque chose comme "$5$bpKU3bUSQLwX87z/$"
.