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

标签 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;
}

输出:

Enter Password1:
password = 007XN7q4UF/o6
Enter Password2:
password = 00MqrTyK65aEA
guess = 00MqrTyK65aEA
Access Granted.

最佳答案

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

您必须同时复制guesspassword:

password = strdup(crypt(getpass("Enter Password1:"), salt));
...
guess = strdup(crypt(getpass("Enter Password2:"), salt));

关于c - 在 C 中使用 crypt 进行简单密码比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13389863/

相关文章:

C将数字列表读入多个数组

计算动态数组读取的复杂度

unix - access(2) 系统调用安全问题

python pip密码学构建轮失败

c - OpenGL glTexImage2D 内存问题

c - 如何要求GCC完全展开此循环(即,剥离此循环)?

linux - 目录被检测为 perl 中的文件

java - 在 Java 7 中,列出带有 "relative path"的文件

node.js - 如何导出 IV 和 key 到 crypto.createCipheriv 进行解密?

.net - 利用 ASP.NET machineKey 加密我自己的数据