2011-12-11 82 views
2

例如在FreeBSD密码存储在/etc/master.passwd中是这样的:转换明文密码MD5哈希盐渍

$1$7wtGfwgp$772bEQInetnJKUNtLM0Xt/ 

我使用的密码是“TEST11”。据我所知,$ 1 $意味着它是散列的MD5 crypt?如果他知道盐和密码并使用md5sum,怎么能得到最终的散列“772bEQInetnJKUNtLM0Xt /”?据我所知,它应该是这样的:

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

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

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

+0

对于http://serverfault.com(或者可能是http://unix.stackexchange.com?)这将是一个更好的问题。 – ziesemer

+0

@ziesemer不是。服务器管理员可能需要这样做,但问题不是这样定向的,我不认为它会被接受。 Unix可以,但我认为这里没问题。 –

回答

2

我在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)) 

根据这条巨蟒文档页面上:

根据维基百科的文章:

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

作为一个侧面说明,这里是一个不错的在线散列发生器:

希望这有助于。

0

散列和crypting是不同的东西,即使是哈希的crypting的一部分;)

所以,如果你想隐窝,这样做就像icyrock公布。 md5sumgmd5sum在freebsd coreutils中)只会创建关于某些输入的散列和(RFC 1321)。它不会像(几个)crypt代码那样使用这个散列来进一步加密。

这就是为什么你的代码给你一些完全不同的结果。