2

例如,在 FreeBSD 下,密码存储在 /etc/master.passwd 中,如下所示:

$1$7wtGfwgp$772bEQInetnJKUNtLM0Xt/

我使用的密码是“Test11”。据我了解,$1$ 意味着它是一个散列的 MD5 加密货币?如果他知道盐和密码并使用 md5sum,他怎么能得出最终的哈希“772bEQInetnJKUNtLM0Xt/”?据我了解,它应该是这样的:

$ echo -n $(echo -n 7wtGfwgp)$(echo -n Test11) | md5sum

..但这并不完全匹配。我究竟做错了什么?

PS 我问这个是为了了解类 UNIX 操作系统下的密码哈希系统。

4

2 回答 2

3

我在 Linux 上,我不确定 FreeBSD 是否真的使用相同的算法,但您可以查看这些信息源(希望 FreeBSD 上也是如此):

根据最后一页,这个 PHP 脚本将产生您期望的输出(给定您的密码和盐):

<?php
$password = 'Test11';
$salt = '$1$7wtGfwgp$';
echo 'Crypt hash: ' . crypt($password, $salt) . "\n"
?>

您可以使用例如 Python 执行相同操作:

import crypt

password = 'Test11'
salt = '$1$7wtGfwgp$'
print(crypt.crypt(password, salt))

基于此 Python 文档页面:

根据维基百科的文章:

你可以在crypt这里看到函数的来源,例如:

作为旁注,这是一个不错的在线哈希生成器:

希望这可以帮助。

于 2011-12-11T04:05:03.160 回答
0

散列和加密是不同的,即使散列是加密的一部分;)

因此,如果您想对其进行加密,请像发布的 icyrock 一样进行操作。md5sumgmd5sum在 freebsd coreutils 中)只创建关于某些输入的哈希和(RFC 1321)。它没有像(几个)加密代码那样在进一步的步骤中使用此哈希进行加密。

这就是为什么您的代码会为您提供完全不同的结果。

于 2014-01-16T20:46:45.957 回答