gpt4 book ai didi

c - 如何将 crypt() 的输出与命令行输入进行比较以破解 C 语言中的密码

转载 作者:行者123 更新时间:2023-11-30 19:03:21 25 4
gpt4 key购买 nike

我正在学习 cs50x 计算机科学入门类(class),练习之一是解密使用 crypt(3) 函数加密的密码。

他们简化了要求,假设密码长度只能是 5 个字符,并且每个字符都是大写或小写字母。

我在加密和比较方面遇到了障碍,并且不确定如何继续前进。

摘要如下。

我已经循环遍历了 A-Z 和 a-z 的所有可能变体,表示 A、AA、AAA、AAAA 和 AAAAA。

我可以将其与 argv 中的用户输入进行比较。

现在我试图让 argv 成为一个哈希值,并将其与(上面可能的密码)的哈希值进行比较

我正在努力的地方 -->

我想象代码应该如何工作

  1. 接收argv[1]并识别盐。
  2. 生成密码
  3. 使用 crypt() 哈希密码
  4. 比较密码哈希与 argv[1]
  5. 如果不匹配,则生成新密码并重复直至匹配。

什么不起作用 -->

存储密码哈希以进行比较,并在操作后使用新哈希更新密码哈希。

我认为我理解的内容 -->

  1. 哈希值存储为字符串文字。
  2. 您无法更新字符串文字。
  3. 我需要分配一个变量来存储哈希值,以便将其与 argv 进行比较。

我错过了什么?我应该阅读哪些内容才能继续前进?

提前致谢!

最佳答案

您可以将 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));

这样,再次调用crypt(3)时,hash就不会被覆盖。

请记住在使用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 字符串,并且我们知道它们以 null 结尾,因此可以使用 strcmp(3) 来比较它们,如果您使用的是原始字节或不保证的 char 数组如果以 null 结尾,最好使用 memcmp(3) 进行比较。

关于c - 如何将 crypt() 的输出与命令行输入进行比较以破解 C 语言中的密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54040140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com