use*_*953 6 php mysql passwords
我习惯使用md5(),我知道它已经过时了,我听说sha1()也是不安全的.那么,考虑到安全性,这几天在数据库中存储和检索密码的最佳方法是什么?如果你能提供一个小例子,我会很高兴.
谢谢!
我建议看看bcrypt,因为它可以帮助抵御暴力攻击.http://codahale.com/how-to-safely-store-a-password/
你可以在这里找到例子
你真的应该使用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)
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)
支持它,您就可以“免费”获得它。
归档时间: |
|
查看次数: |
5399 次 |
最近记录: |