PHP存储密码的好方法

时间:2014-01-14 12:34:43

标签: php passwords

因为PHP的新密码库是一种模糊的信息老虎钳。我想也许你有更多的经验,然后我。

我正在努力保存密码。

$options = ['cost' => 11,'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM)];
$u = password_hash($_POST['password'], PASSWORD_BCRYPT, $options);

这是这样做的吗?可以以某种方式改进吗?

1 个答案:

答案 0 :(得分:1)

这几乎就是这样做的。在大多数情况下,最好省略salt参数。如果没有此参数,该函数将从操作系统的随机源生成加密安全的盐。

// Hash a new password for storing in the database.
// The function automatically generates a cryptographically safe salt.
$hashToStoreInDb = password_hash($password, PASSWORD_BCRYPT, array("cost" => 11));

// 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);

更详细一点:生成salt的方法需要比所需更多的随机字节,因为BCrypt需要一个编码的盐,而不是你创建的二元盐。据我所知,函数password_hash会正确编码,但它只会使用必要的字节。

注意:在这种情况下,您可以直接使用$ _POST ['password'](不需要转义),因为散列函数适用于所有类型的输入并将生成“安全”字符串,这是不容易进行SQL注入。