将纯文本密码转换为MD5盐渍哈希

时间:2011-12-11 03:21:47

标签: salt md5sum

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

$1$7wtGfwgp$772bEQInetnJKUNtLM0Xt/

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

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

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

PS我问这是为了理解类UNIX操作系统下的密码散列系统。

2 个答案:

答案 0 :(得分: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功能的来源,例如这里:

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

希望这有帮助。

答案 1 :(得分:0)

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

所以如果你想加密它,就像icyrock发布的那样。 md5sum(freebsd coreutils中的gmd5sum)仅创建关于某些输入的哈希值(RFC 1321)。它没有使用这个哈希来进一步加密,因为(几个)加密代码会这样做。

这就是为什么你的代码会给你带来完全不同的结果。