(bin ich mit CS50 nicht vertraut. Ich diese Frage unter der Annahme, mich beantworten, dass crypt
die Funktion Standard-C-Bibliothek crypt(3)
von der traditionellen Unix ist.)
crypt
ein sehr alt Funktion, aus den Tagen, bevor jemand besorgt über Thread-Sicherheit in C. Jedes Mal, wenn Sie es aufrufen, gibt es die gleichen Zeiger, zeigt auf einen statischen Puffer in der C-Bibliothek. Jeder Anruf überschreibt das Ergebnis eines vorherigen Anrufs.
Wenn Sie das Ergebnis des ersten crypt
Anruf auszudrucken, bevor es wieder anrufen ...
#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;
}
... dann werden Sie zwei verschiedene Strings sehen. Die Ausgabe auf meinem Computer ist
AAAA
AAzz
daeBW5vt16USo
aaI8pRQwCn7N2
Da Sie Salz Saiten verwenden, die den alten DES-basierten Passwort-Hash-Algorithmus beantragen, sollten Sie die gleiche Sache bekommen.
Dies ist eine Übung im Klassenzimmer, aber ich muss noch darauf hinweisen, dass der alte DES-basierte Passwort-Hash kann durch brachiale Gewalt auf jedem modernen Computer gebrochen werden, so dass es nie für echte Passwörter verwendet werden sollte. Sie können wahrscheinlich einen besseren Algorithmus verwenden, der verwendet werden soll, indem Sie einen anderen Stil der Saltzeichenfolge angeben, etwa "$5$bpKU3bUSQLwX87z/$"
.