2011-10-01 71 views
0

我有一堆MD5哈希密码,我想将其转换为crypt-style MD5。如何将MD5十六进制字符串转换为base-64 MD5字符串?

如果我有明文我可以轻松地创建两个:

% echo -n 'testpass' | md5sum 
179ad45c6ce2cb97cf1029e212046e81 - 

% echo -n 'testpass' | openssl passwd -1 -stdin -salt '' 
$1$$JN/baUhJCUwYKagp48tsP0 

但我怎么转换179ad45c6ce2cb97cf1029e212046e81JN/baUhJCUwYKagp48tsP0

+0

直到你明白它是什么,才执行加密。玩这一切你想要的和学习,只是不要把它放到人们所依赖的任何东西上,直到你真的得到它。 – Incognito

回答

2

第一个字符串在十六进制中,第二个字符串是一个base64。

MD5散列是一个128位数字 ..它可以选择打印的方式可以是一个十六进制字符串或base64编码的字符串 - 都只是128位数的表示。

然而ms5sumopenssl passwd不会加密哈希密码相同的128散列值,所以相同的密码不会产生相同的128位数字,所以在您的例子中的一个密码散列不会转换为其他

+0

加密如何不同?在这两种情况下都没有盐,“openssl passwd”做了什么不同?如果只是额外的迭代,那么我在翻译中也可以这样做。 –

+0

openssl-passwd手册说明它是基于MD5的,而不是实际的MD5。我想读源代码会告诉它是如何不同。 – Soren

+0

@Legate它不是加密的开始... –

1

你说你有一些你想要转换成“crypt-style”MD5的MD5哈希密码。如果是这种情况,那么您可能希望生成一个可用于验证Apache用户的文件。不幸的是,你可能无法从普通的MD5哈希值中做到这一点。

Apache的MD5-Crypt哈希算法不是仅密码的MD5总和。 -1变体也不是。两者附加一些东西或以其他方式修改不包含salt的输入密码以提供结果散列。如果确实使用描述的方法将MD5哈希值传递给md5sum,那么得到的哈希值不能颠倒为任何可以散列到htpasswd兼容哈希值的值。

对不起

相关问题