3

所以,我在 linux shadow 文件中有这个条目

google.:$1$8KdNUQ4R$ZYyUXVGhvLgVNpfqus.GX/::1:0:1:1:::

该用户的密码是com

据我了解,$1$它是使用 md5 散列的方法; 8KdNUQ4R是盐;并且ZYyUXVGhvLgVNpfqus.GX/是散列密码本身。

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

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

编辑

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

4

1 回答 1

5

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

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

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

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

slava@bird:~$ g++ crypt.cpp -lcrypt -o crypt_com
slava@bird:~$ ./crypt_com 
$1$8KdNUQ4R$ZYyUXVGhvLgVNpfqus.GX/
于 2013-03-01T19:46:10.037 回答