PHP - MD5、SHA、散列安全

标签 php security hash md5 sha1

我是一个用 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.pdfUnderstanding sha-1 collision weakness

关于PHP - MD5、SHA、散列安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14752416/

相关文章:

c++ - 如何在 C++ 中计算对象的哈希/校验和/指纹?

php - Cake PHP 3 导致过早注销

c++ - 使用 'magic numbers' 保卫类(class)

security - 哪些浏览器容易受到多个 x-frame-options 的影响

ios - 如何以编程方式将用户名和密码存储在自动填充中?

php - 缓存数据与写入内存表

ruby - 如何根据现有键名复制 Ruby 哈希?

php - 将mysql数据导出到csv并下载csv文件

php - 没有从 SQL 查询中获取输出

php - 将查询循环到单独的表中