PHP存储密码的好方法

PHP存储密码的好方法,php,passwords,Php,Passwords,因为PHP的新密码库是一种模糊的信息。我在想也许你比我更有经验 我正在努力以一种好的方式存储密码 $options = ['cost' => 11,'salt' => mcrypt_create_iv(22, MCRYPT_DEV_URANDOM)]; $u = password_hash($_POST['password'], PASSWORD_BCRYPT, $options); 这样做吗?它可以改进吗?这几乎就是解决问题的方法。在大多数情况下,最好省略salt参数。如果没有此

因为PHP的新密码库是一种模糊的信息。我在想也许你比我更有经验

我正在努力以一种好的方式存储密码

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

这样做吗?它可以改进吗?

这几乎就是解决问题的方法。在大多数情况下,最好省略salt参数。如果没有此参数,函数将从操作系统的随机源生成加密安全的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在创建时需要的是编码的salt,而不是二进制salt。据我所知,函数password_hash将对其进行正确编码,但它只使用必要的字节


注意:在这种情况下,您可以直接使用$\u POST['password'](不需要转义),因为哈希函数可以处理所有类型的输入,并将生成一个“安全”字符串,不容易进行SQL注入。

使用单向加密,如sha1()或md5(),只是不要直接放置$\u POST。其余的看起来不错imo@Sundar-当OP询问PHP中密码处理的推荐解决方案时,建议使用不安全的哈希(甚至不提salting),这不是一个非常明智的建议。Kay我必须学习PHP 5.5,感谢更新,甚至在PHP 5.5 md5或sha1应该被salted之前,使其更加安全;)