在mysql数据库中存储密码的最佳方法?

use*_*953 6 php mysql passwords

可能重复:
如何最好地存储用户信息和用户登录名和密码
如何在PHP中使用bcrypt进行散列密码?

我习惯使用md5(),我知道它已经过时了,我听说sha1()也是不安全的.那么,考虑到安全性,这几天在数据库中存储和检索密码的最佳方法是什么?如果你能提供一个小例子,我会很高兴.

谢谢!

nKa*_*del 8

我建议看看bcrypt,因为它可以帮助抵御暴力攻击.http://codahale.com/how-to-safely-store-a-password/

你可以在这里找到例子

  • bcrypt是唯一专门设计为难以破解的方法.SHA1,SHA256尤其是MD5是不够的. (2认同)

mar*_*kli 5

你真的应该使用bcrypt来哈希你的密码,它是专门为哈希密码而设计的。

密码的哈希函数应该很(需要一些计算时间)。大多数哈希算法(例如 SHA-1 和 MD5 甚至 SHA-256)都被设计为快速,但这使其很容易成为暴力攻击的目标。现成的 GPU 每秒能够计算大约 8 Giga MD5 哈希!

不要害怕使用 bcrypt!它不仅仅适用于高安全性站点,而且使用它就像使用 md5 哈希一样简单。建议使用像phpass这样完善的库,如果您想了解它是如何实现的,您可以阅读这篇文章,我试图在其中解释最重要的一点。

更新:

当前的PHP版本提供了password_hash()password_verify()函数来处理密码。像这样使用它们:

// Hash a new password for storing in the database.
// The function automatically generates a cryptographically safe salt.
$hashToStoreInDb = password_hash($password, PASSWORD_DEFAULT);

// Check if the hash of the entered login password, matches the stored hash.
// The salt and the cost factor will be extracted from $existingHashFromDb.
$isPasswordCorrect = password_verify($password, $existingHashFromDb);
Run Code Online (Sandbox Code Playgroud)


Sea*_*ght 2

crypt我们与 Blowfish 一起使用:

// Hash our password
$hashed = crypt($plain_text_password, '$2a$08$' . substr(hash('whirlpool', microtime()), rand(0, 105), 22));

// Validate a password
if (crypt($plain_text_password, $hashed) == $hashed)) {
    // Valid password
}
Run Code Online (Sandbox Code Playgroud)

salt 前缀$2a$(阅读文档)指示crypt使用 Blowfish。假设底层操作系统中的实现crypt(3)支持它,您就可以“免费”获得它。