PHP.net说md5()和sha1()不适合作为密码?

PHP.net说md5()和sha1()不适合作为密码?,php,mysql,hash,passwords,md5,Php,Mysql,Hash,Passwords,Md5,我将用户密码以散列形式存储在MySQL数据库中。这是否意味着这样做不安全?如果是,我的选择是什么?以前已经回答过很多次了。您可以使用类似SHA-256的东西,但也应该在对密码进行哈希运算之前对密码进行盐处理,并且可以对密码进行迭代哈希运算-因此,在不太可能的情况下,密码被破解只会显示另一个哈希值(换句话说,破解密码需要更长的时间)。您链接的常见问题解答中的下一个问题将讨论它: 从常见问题解答: 建议在对密码进行哈希运算时使用的算法是Blowfish,因为它在计算成本上明显高于MD5或SHA1,同


我将用户密码以散列形式存储在MySQL数据库中。这是否意味着这样做不安全?如果是,我的选择是什么?

以前已经回答过很多次了。您可以使用类似SHA-256的东西,但也应该在对密码进行哈希运算之前对密码进行盐处理,并且可以对密码进行迭代哈希运算-因此,在不太可能的情况下,密码被破解只会显示另一个哈希值(换句话说,破解密码需要更长的时间)。

您链接的常见问题解答中的下一个问题将讨论它:

从常见问题解答:

建议在对密码进行哈希运算时使用的算法是Blowfish,因为它在计算成本上明显高于MD5或SHA1,同时仍然具有可伸缩性


下面的问题是关于salt的。

阅读链接的下一部分:如果常用的哈希函数不适用,我应该如何哈希我的密码

正如链接到的页面所推荐的,将PHP
crypt()函数与Blowfish算法一起使用。另外,对
crypt()
的每次调用使用不同的salt。您可以将salt值存储在与密码相同的数据库表中,以便在以后比较密码时使用

要使用河豚算法调用
crypt()
,请使用以
$2a$
开头的salt,后跟介于04和31之间的数字(“成本参数”),后跟
$
,然后是字母表
/0-9A-Za-z
中的22位数字


包含有关如何使用
crypt()

的更多详细信息。要了解为什么使用普通的、未加盐的MD5进行密码哈希是个坏主意,请尝试将一些合理常用密码的MD5哈希输入到类似或的网站中。或者直接输入,这(以及其他许多密码)。

在存储密码之前,您需要先对密码进行salt+哈希运算。这个网站上有很多与此相关的问题。就像河马说的,这是因为它不含盐。如果您使用crypt,它将使用您选择的其中一种算法,但它也会对密码进行加密。