对 unix 影子文件的密码进行哈希处理

Dzs*_*sek 3 hash hex md5 shadow

所以,我在 Linux 影子文件中有这个条目

google.:$1$8KdNUQ4R$ZYyUXVGhvLgVNpfqus.GX/::1:0:1:1:::
Run Code Online (Sandbox Code Playgroud)

该用户的密码是com

据我了解,$1$它是使用 md5 进行散列的; 8KdNUQ4R是盐;是ZYyUXVGhvLgVNpfqus.GX/哈希密码本身。

让我困惑的是,我在网上找到的 md5 生成器会生成 32 个字符长的十六进制值,但本例中的哈希密码只有 22 个字符长,而且绝对不是十六进制。

我必须经过哪些步骤才能com使用ZYyUXVGhvLgVNpfqus.GX/给定的盐?

编辑

所以,我找到了答案。我的问题是我应该使用 md5crypt 而不是 md5。

Sla*_*ica 5

如果您需要计算特定密码的哈希值,请使用 crypt(3):

#include <iostream>
#include <unistd.h>

int main()
{
   std::cout << crypt( "com", "$1$8KdNUQ4R" ) << std::endl;
   return 0;
}
Run Code Online (Sandbox Code Playgroud)

如果你想知道如何获取它 - salt + 密码的 md5 哈希结果通过 base64 转换为字符串。

slava@bird:~$ g++ crypt.cpp -lcrypt -o crypt_com
slava@bird:~$ ./crypt_com 
$1$8KdNUQ4R$ZYyUXVGhvLgVNpfqus.GX/
Run Code Online (Sandbox Code Playgroud)