例如,在 FreeBSD 下,密码存储在/etc/master.passwd 中,如下所示:
$1$7wtGfwgp$772bEQInetnJKUNtLM0Xt/
我使用的密码是“Test11”。据我了解,$1$ 意味着它是哈希 MD5 密码?如果知道盐和密码并使用 md5sum,如何得出最终的哈希值“772bEQInetnJKUNtLM0Xt/”?据我了解,它应该是这样的:
$ echo -n $(echo -n 7wtGfwgp)$(echo -n Test11) | md5sum
..但这不太相符。我做错了什么?
PS 我问这个问题是为了了解类 UNIX 操作系统下的密码哈希系统。
最佳答案
我使用的是 Linux,我不确定 FreeBSD 是否实际上使用相同的算法,但是您可以查看这些信息来源(希望 FreeBSD 上也是如此):
- man 3 crypt
- https://unix.stackexchange.com/questions/21897/grub-md5-crypt-algorithm
- http://s23.org/wiki/Crypt
根据最后一页,此 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
函数的来源,例如这里:
顺便说一句,这是一个很好的在线哈希生成器:
希望这有帮助。
关于salt - 将纯文本密码转换为 MD5 salted hash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8461740/