Вы можете присвоить результат crypt(3)
для char*
и ссылаться на хеш из указателя:
char *compare = crypt(p, salt);
compare = crypt(p, salt);
Поскольку crypt(3)
имеет свое собственное статическое пространство данных, которое будет перезаписываться при каждом обращении к нему, вы можете скопировать хэш в пространство вашей программы, используя массив char и strcpy(3)
char hash[256]; // arbitrary length, enough to store the hash without overflowing
char *compare = crypt(p, salt);
strcpy(hash, compare);
или, более кратко,
char hash[256];
strcpy(hash, crypt(p, salt));
Таким образом, hash
не будет перезаписан при повторном вызове crypt(3)
.
Не забудьте проверить нулевой результат crypt(3)
перед его использованием, так как он может вернуть нулевой указатель при ошибке.
char *compare = crypt(p, salt);
compare = crypt(p, salt);
if (compare) { // null check
if (strcmp(compare, input) == 0) }
printf("%s is identical to %s!", compare, input);
} else {
printf("%s does not match %s."), compare, input);
}
}
Поскольку вы работаете с c-строками, и мы знаем, что они имеют нулевое завершение, можно сравнить их с помощью strcmp(3)
, если бы вы использовали необработанные байты или массивы char, которые не гарантированно заканчивались нулем, было бы лучше использовать memcmp(3)
для сравнения.