首先md5和sha1已经被证明容易受到碰撞攻击并且可以彩虹
轻松查看表(当他们查看您的哈希值是否与他们的常用密码数据库中的相同时)。
目前有两种足够安全的密码可供您使用。
第一个是 sha512。 sha512 是 SHA2 的子版本。 SHA2 尚未被证明
容易受到碰撞攻击,sha512 将生成 512 位哈希值。这是一个例子
如何使用sha512:
<?php
hash('sha512',$password);
另一个选项称为 bcrypt。 bcrypt 以其安全哈希而闻名。它是
可能是目前最安全的一种,也是最可定制的一种。
在开始使用 bcrypt 之前,您需要检查您的服务器是否已启用它,输入
这段代码:
<?php
if (defined("CRYPT_BLOWFISH") && CRYPT_BLOWFISH) {
echo "CRYPT_BLOWFISH is enabled!";
}else {
echo "CRYPT_BLOWFISH is not available";
}
如果它返回它已启用,那么下一步很简单,您需要做的就是加密
密码是(请注意,要获得更多可定制性,您需要查看此如何在 PHP 中使用 bcrypt 对密码进行哈希处理? https://stackoverflow.com/questions/4795385/how-do-you-use-bcrypt-for-hashing-passwords-in-php):
crypt($password, $salt);
现在回答你的第二个问题。盐通常是添加在末尾的随机字符串
当你散列它们时,你所有的密码。使用盐意味着如果有人获取你的数据库
他们无法检查常用密码的哈希值。检查数据库称为使用彩虹表。散列时你应该始终使用盐!
以下是我对 SHA1 和 MD5 碰撞攻击漏洞的证明:
http://www.schneier.com/blog/archives/2012/10/when_will_we_se.html http://www.schneier.com/blog/archives/2012/10/when_will_we_se.html, http://eprint.iacr.org/2010/413.pdf http://eprint.iacr.org/2010/413.pdf, http://people.csail.mit.edu/yiqun/SHA1AttackProceedingVersion.pdf http://people.csail.mit.edu/yiqun/SHA1AttackProceedingVersion.pdf, http://conf.isi.qut.edu.au/auscert/proceedings/2006/gauravaram06collision.pdf http://conf.isi.qut.edu.au/auscert/proceedings/2006/gauravaram06collision.pdf and 了解 sha-1 碰撞弱点 https://stackoverflow.com/questions/1147830/understanding-sha-1-collision-weakness