如何在 postgresql 中使用 bcrypt 重新散列用户的密码,而无需在 php 中迭代它们?



在我的数据库中,我使用弱散列SHA1作为密码。我想把它们迁移到一个更强的哈希(bcrypt)。通常通过以下php脚本完成:

$sql = "SELECT user_id,password from users";
/**
* @var $pdo database connection
*/
$statement = $pdo->prepare('UPDATE users SET password = :password WHERE user_id = :user_id");
foreach( $pdo->query($sql) as $user)
{
$password  = password_hash($user['password'],PASSWORD_DEFAULT);
$statement->bindParam(':password',$password);   
$statement->bindParam(':user_id',$user['user_id']);
$stmt->execute();
}

但是在大型数据集上更新需要很长时间。因此,你知道一个更快的方法来散列所有用户的密码在postgresql与postgresql本地密码更新?

上面的代码也将在迁移脚本中运行,它也可能导致部署的一些延迟。

为了随时更新密码,请运行以下sql:

UPDATE users SET password = crypt(users.password,gen_salt('bf')), double_hash=true;

确保密码字段长度至少为72个字符。登录成功后,使用password_hash重新散列提供的密码。

相关内容

  • 没有找到相关文章

最新更新