SHA1 vs md5 vs SHA256:哪个用于PHP登录?
我正在进行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);
回答:
都不行
您应该使用bcrypt
。您提到的散列均经过优化,可在硬件上快速便捷地使用,因此破解它们具有相同的品质。如果您别无选择,至少要确保使用长盐并多次重新哈希。
在PHP 5.5+中使用bcrypt
PHP5.5提供了用于密码哈希的新功能。这是在现代Web应用程序中存储密码的推荐方法。
// Creating a hash$hash = password_hash($password, PASSWORD_DEFAULT, ['cost' => 12]);
// If you omit the ['cost' => 12] part, it will default to 10
// Verifying the password against the stored hash
if (password_verify($password, $hash)) {
// Success! Log the user in here.
}
如果您使用的是旧版本的PHP,则确实应该升级,但是在您这样做之前,您可以使用password_compat公开此API。
另外,请让我们password_hash()
为您生成盐。它使用CSPRNG。
bcrypt的两个警告
- Bcrypt会自动截断任何长度超过72个字符的密码。
- Bcrypt将在任何
NUL
字符后截断。
(这里有两个警告的概念证明。)
在通过bcrypt运行密码之前,您可能会通过预先散列密码来解决第一个警告,但这可能会使您的应用程序先运行到第二个。
不用编写自己的方案,而使用由安全专家编写和/或评估的现有库。
Zend\Crypt
(Zend Framework的一部分)提供BcryptSha
PasswordLock
与相似,BcryptSha
但它还使用认证的加密库加密bcrypt哈希。
- 使用bcrypt。
以上是 SHA1 vs md5 vs SHA256:哪个用于PHP登录? 的全部内容, 来源链接: utcz.com/qa/401474.html