我从用户那里读取了第一个密码并对其进行了加密。然后我读取了第二个密码并对其进行了加密。然后我比较了两个加密的密码,但比较总是表明它们是相等的。我将问题缩小为:在第二次加密后,password
和 guess
变量具有相同的值。这是一个奇怪的错误;谁能提供见解和/或修复?
提前致谢。代码:
int main(void)
{
char salt[] = "00";
char *password;
char *guess;
password = crypt(getpass("Enter Password1:"), salt);
printf("password = %s\n", password);
guess = crypt(getpass("Enter Password2:"), salt);
printf("password = %s\n", password);
printf("guess = %s\n", guess);
puts(strcmp(guess, password) == 0
? "Access Granted." : "Access Denied.");
return 0;
}
输出:
Enter Password1:
password = 007XN7q4UF/o6
Enter Password2:
password = 00MqrTyK65aEA
guess = 00MqrTyK65aEA
Access Granted.
最佳答案
根据 crypt
的联机帮助页,它返回一个指向静态缓冲区的指针。
您必须同时复制guess
和password
:
password = strdup(crypt(getpass("Enter Password1:"), salt));
...
guess = strdup(crypt(getpass("Enter Password2:"), salt));
关于c - 在 C 中使用 crypt 进行简单密码比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13389863/