不,你不会通过散列一次、两次或十次来增加熵。考虑输入的熵,而不是输出的熵。您不能使用确定性过程添加熵,因为结果的熵不计算在内。
即使你有这样的代码:
$password = "123456";
$result = md5($password) . sha1($password) . hash('gost', $password);
echo $result; // e10adc3949ba59abbe56e057f20f
// 8941b84cdecc9c273927ff6d9cca1ae75945990a2cb1f
// 81e5daab52a987f6d788c372
最后你会得到一个看起来很吓人的 136 字节字符串,密码仍然是123456
,任何攻击者暴力破解你的哈希密码平均只需要尝试一次,123456
几乎每个列表中最差的密码也是如此。
如果使用 md5 对随机密码进行哈希处理,输出是否会提供 128 位熵?
不,MD5 是确定性的,所以如果攻击者知道字符串是一个 MD5 哈希,它的熵就是你提供的随机密码的熵。
为了使密码更安全,使用适当的密钥派生(PBKDF2是一个很好的),要求用户提供更长的密码,并检查用户是否遵循基本密码规则(连续没有重复的字符,适当的长度,混合数字和字符,大小写混合,诸如此类)。