【发布时间】:2013-02-22 02:22:03
【问题描述】:
我想用 PHP 将安全的用户密码存储在 MySQL 数据库中。
我怎样才能让它变得更好?
我的班级:
private static $algo = '$2a';
private static $cost = '$10';
private static $pepper = 'eMI8MHpEByw/M4c9o7sN3d';
public static function generateSalt($length) {
$randomBinaryString = mcrypt_create_iv($length, MCRYPT_DEV_URANDOM);
$randomEncodedString = str_replace('+', '.', base64_encode($randomBinaryString));
return substr($randomEncodedString, 0, $length);
}
public static function generateHash($password) {
if (!defined('CRYPT_BLOWFISH'))
die('The CRYPT_BLOWFISH algorithm is required (PHP 5.3).');
$password = hash_hmac('sha256', $password, self::$pepper, false);
return crypt($password, self::$algo . self::$cost . '$' . self::generateSalt(22));
}
public static function checkPassword($hash, $password) {
$salt = substr($hash, 0, 29);
$password = hash_hmac('sha256', $password, self::$pepper, false);
$new_hash = crypt($password, $salt);
return ($hash == $new_hash);
}
【问题讨论】:
-
虽然这在技术上是有答案的,但您的问题是相当武断和开放式的,应该改写以解决特定问题。
-
对不起,这是我的第一个“问题”,下次我会做得更好!
-
没问题;我给出了一个广泛的答案,并提供了一些关于散列和一般安全性的提示。
-
看看answer中新的PHP函数
password_hash()和password_verify()的使用。 -
这不应该在 Code Review SE 中吗?
标签: php hash salt blowfish crypt