微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何在 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 重新哈希提供的密码。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。