gpt4 book ai didi

crypt on suse 导致段错误

转载 作者:太空宇宙 更新时间:2023-11-04 05:00:37 28 4
gpt4 key购买 nike

我正在做一个 PAM 类型的事情,它需要检查/etc/shadow 中的用户密码。

通常,这涉及读取加密 ID、盐和密码的密码行。使用 ID 和盐,可以使用 crypt(3) 或 m_crypt(在同一手册页上)对用户提供的密码进行哈希处理,然后比较结果。这在许多系统上运行良好,例如 Ubuntu,但我在 SUSE 上遇到了重大问题。

系统使用 Blowfish,“正确处理 8 位字符”。它的哈希 ID 为“2y”。不幸的是,每当为此调用 crypt(3) 时,它就会出现段错误。 ID“2a”也是如此,这是识别 Blowfish 的第一个代码。所有其他哈希算法都有效。

系统必须有一个可以进行 Blowfish 散列的工作地穴(或等效物),因为/etc/shadow 文件有它的示例,但我无法使它工作。谁能指出我正确的方向?

段错误示例:

#define _XOPEN_SOURCE
#include <unistd.h>
#include <stdio.h>

int main(int argc, char** argv) {
char *pass = "tqbfjotld";
char *salt = "$2y$10$";
char *pp = NULL;
pp = crypt(pass, salt);
printf("%s\n", pp);
return 0;
}

salt $2a$10$ 也显示错误。

它适用于其他系统,例如 Ubuntu,其他哈希算法也适用于 SUSE。

有什么想法吗?

最佳答案

crypt() 返回 NULL 意味着错误,可能是无效的 salt,因为 2y 是未知的。根据维基百科,这似乎是一个相当新的补充: https://en.wikipedia.org/wiki/Crypt_%28C%29

“$2y$ - 2011 年后的错误发现,$2y$ 可用于明确使用新的、更正后的算法。在存在错误的实现中,$2y$ 根本不起作用。在较新的,固定的实现,它将产生与使用 $2a$ 相同的结果。”

试试这个来得到错误:

#include <errno.h>
printf("%p (errno=%d: %s)\n", pp, errno, strerror(errno));

glibc-2.19 不支持任何 Blowfish 算法,我在最近的 Debian 8.1 上也得到一个 NULL 指针。

也许您的 SUSE 系统包含的密码条目随着时间的推移而迁移,甚至不再可用。或者其他一些软件,如自定义 PAM 模块使用自定义库评估和检查密码条目,而不是使用标准 libc crypt() 函数。

关于crypt on suse 导致段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30921488/

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