是的,还有很多其他的散列算法,比SHA1 强得多。检查SHA512,例如:它有 512 位,例如,MD5 有 128 位。
无论如何,如果您正在寻找真正的安全,您应该应用以下方法之一:
1) “固定盐”:您使用:而不是md5($pass):
$salt="NaCl";
$hash=md5($salt);
2) “随机盐”:代替 md5($pass)',您生成一个随机盐(使用函数 rand($minValue, $maxValue)),范围很广(比如 rand(0, pow(10, 100)) 并使用 md5($pass, $salt)。不要忘记存储哈希和盐!
3) 加密:您使用固定或随机密钥(参见前面的方法),并使用它来加密密码。我真的建议使用 Blowfish 算法。
来自 PHP.net 上的page:
<?php
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$key = "This is a very secret key";
$text = "Meet me at 11 o'clock behind the monument.";
echo strlen($text) . "\n";
$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $key, $text, MCRYPT_MODE_ECB, $iv);
echo strlen($crypttext) . "\n";
?>
在 JavaScript 中实现 SHA512(不生成盐)(来自 the CryptoJS library):
<script src="http://crypto-js.googlecode.com/svn/tags/3.0.2/build/rollups/sha512.js"></script>
<script> var hash = CryptoJS.SHA512("Message"); </script>
在 JavaScript 中实现 bcrypt:参见 this example。