SHA1、md5和SHA256:在PHP登录中应该使用哪个?

136

我正在制作一个PHP登录系统,我在考虑使用SHA1、MD5还是另一篇Stackoverflow文章中提到的SHA256。它们中有哪个更安全?对于SHA1/256,我是否仍要使用盐?

此外,将密码以哈希方式存储在MySQL中是否安全?

function createSalt()
{
    $string = md5(uniqid(rand(), true));
    return substr($string, 0, 3);
}

$salt = createSalt();

$hash = sha1($salt . $hash);

1
请查看https://dev59.com/C3I-5IYBdhLWcg3w99kH#1592620 - Asaph
请参考这个答案,并阅读有关密码哈希的部分。 - Ja͢ck
11个回答

-1
假设以下情况:黑客窃取了我们的数据库,包括用户和密码(加密)。黑客创建了一个带有他们知道密码的虚假账户。
MD5是弱的,因为它短而流行,几乎每个没有密码的哈希生成都容易受到字典攻击。但是...
所以,假设我们仍在使用带有SALT的MD5。黑客不知道SALT,但他们知道特定用户的密码。因此,他们可以测试:?????12345,其中12345是已知密码,而?????是SALT。黑客迟早会猜出SALT。
然而,如果我们使用了MD5+SALT并应用了MD5,则无法恢复信息。但是,我要重申,MD5仍然很短。
例如,假设我的密码是:12345。SALT是BILLCLINTON
md5:827ccb0eea8a706c4c34a16891f84e7b
带哈希的md5:56adb0f19ac0fb50194c312d49b15378

使用md5哈希的mD5:28a03c0bc950decdd9ee362907d1798a。我尝试使用在线服务,但没有一个能够破解它。而且这只是MD5!(也许今天可以被破解,因为我在线生成了md5)

如果你想要更高级的保护,那么带盐并进行两次SHA256就足够了。

简而言之,MD5(HASH+MD5(密码))= 可行但不够安全,SHA256已经足够了。


使用MD5加盐的问题在于计算机可以以超快的速度对一个密码进行暴力攻击。http://shylor.com/2015/09/14/php-5-5-secure-password-hashing/ - Shylor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接