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的两个警告

  1. Bcrypt会自动截断任何长度超过72个字符的密码。
  2. Bcrypt将在任何NUL字符后截断。

(这里有两个警告的概念证明。)

在通过bcrypt运行密码之前,您可能会通过预先散列密码来解决第一个警告,但这可能会使您的应用程序先运行到第二个。

不用编写自己的方案,而使用由安全专家编写和/或评估的现有库。

  • Zend\Crypt(Zend Framework的一部分)提供 BcryptSha
  • PasswordLock与相似,BcryptSha但它还使用认证的加密库加密bcrypt哈希。

- 使用bcrypt。

以上是 SHA1 vs md5 vs SHA256:哪个用于PHP登录? 的全部内容, 来源链接: utcz.com/qa/401474.html

回到顶部