例如,在FreeBSD下,密码存储在/etc/master.passwd中,如下所示:
$1$7wtGfwgp$772bEQInetnJKUNtLM0Xt/
我使用的密码是“Test11”。据我所知,1美元意味着它是一个哈希的MD5密码?如果他知道盐和密码并使用md5sum,怎么能得出最终的哈希值“772bEQInetnJKUNtLM0Xt /”?据我了解,它应该是这样的:
$ echo -n $(echo -n 7wtGfwgp)$(echo -n Test11) | md5sum
..但这并不完全匹配。我做错了什么?
PS我问这是为了理解类UNIX操作系统下的密码散列系统。
答案 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)。它没有使用这个哈希来进一步加密,因为(几个)加密代码会这样做。
这就是为什么你的代码会给你带来完全不同的结果。