为Unix影子文件生成密码哈希值

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。

通常情况下并不是那么简单,你需要查看你的发行版具体使用了什么。这个问题可能会对你有所帮助:http://serverfault.com/questions/88284/how-is-a-password-hash-encoded-in-the-shadow-password-file - akostadinov
问题是我只收到了影子文件作为任务的一部分,要尽可能多地找到密码。我考虑从单词列表中进行哈希并进行比较。有更好的方法吗? - Dzsek
似乎有很多用于破解影子文件的工具,特别是基于MD5的。在合理的时间范围内,不太可能编写比已有工具更快的程序。我个人没有经验,但听起来像是浪费时间。 - akostadinov
我发现了一个名为John the Ripper的工具,它似乎运行得相当不错,但是这并不令人满意。我想知道它是如何工作的,而不仅仅是得到结果。 - Dzsek
1个回答

5

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

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

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

如果您想知道如何获取它 - 将盐和密码的md5哈希结果转换为字符串,方法是使用base64。
slava@bird:~$ g++ crypt.cpp -lcrypt -o crypt_com
slava@bird:~$ ./crypt_com 
$1$8KdNUQ4R$ZYyUXVGhvLgVNpfqus.GX/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接