在C中使用crypt进行简单密码比较

Noa*_*oah 4 c unix cryptography

我从用户那里读取了第一个密码并对其进行了加密.然后我读了第二个密码并加密了.然后我比较了两个加密密码,但比较总是表明它们是相同的.我将问题缩小到这个:在第二次加密之后,passwordguess变量具有相同的值.这是一个奇怪的错误; 任何人都可以提供洞察力和/或修复?

先感谢您.代码:

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;
}
Run Code Online (Sandbox Code Playgroud)

输出:

Enter Password1:
password = 007XN7q4UF/o6
Enter Password2:
password = 00MqrTyK65aEA
guess = 00MqrTyK65aEA
Access Granted.
Run Code Online (Sandbox Code Playgroud)

lda*_*v1s 6

根据联机帮助页crypt,它返回一个指向静态缓冲区的指针.

你必须复制两个guesspassword:

password = strdup(crypt(getpass("Enter Password1:"), salt));
...
guess = strdup(crypt(getpass("Enter Password2:"), salt));
Run Code Online (Sandbox Code Playgroud)