我是一个用 PHP 构建的新网站的开发人员,我想知道什么是最好的
用于散列的东西。我查看了 md5 和 sha1,但还有什么更安全的吗?
很抱歉,如果这是一个笨拙的问题,但我是 PHP 安全的新手,我正在努力让我的
网站尽可能安全。还有什么是盐?
谢谢,
瓦西姆
最佳答案
首先,md5 和 sha1 已被证明可以抵抗碰撞攻击并且可以是彩虹
很容易列出(当他们看到你的哈希值在他们的常用密码数据库中是否相同时)。
目前有两种足够安全的密码可供您使用。
第一个是 sha512。 sha512 是 SHA2 的子版本。 SHA2 尚未被证明是
vunrable 碰撞攻击和 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";
}
如果它返回它已启用,那么下一步很简单,您需要做的就是加密一个 密码是(注意更多的可定制性,你需要看到这个 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://eprint.iacr.org/2010/413.pdf , http://people.csail.mit.edu/yiqun/SHA1AttackProceedingVersion.pdf , http://conf.isi.qut.edu.au/auscert/proceedings/2006/gauravaram06collision.pdf和 Understanding sha-1 collision weakness
关于PHP - MD5、SHA、散列安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14752416/