You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取经password_hash()哈希处理后的原始密码?

关于bcrypt哈希密码无法还原的说明及替代方案

兄弟,先给你明确一个核心事实:你完全没办法从password_hash()生成的bcrypt哈希值中还原出原始密码。

为什么没法还原?

PASSWORD_BCRYPT采用的是bcrypt哈希算法,这类算法从设计之初就是单向不可逆的。它的作用是把原始密码通过复杂运算转换成一串无意义的字符,这个过程不存在反向解密的途径——password_verify()也不是解密,它只是把用户输入的原始密码用同样的哈希规则运算一遍,对比结果是否一致,最终返回布尔值而已。

那想在编辑密码前“确认原密码”该怎么做?

这是个常见需求,但行业标准做法绝对不是去还原哈希密码,而是换一种思路:

  • 要求用户输入当前正在使用的密码,用password_verify()验证这个输入和数据库里的哈希值是否匹配
  • 验证通过后,再允许用户设置新密码

给你举个简单的代码示例:

// 从数据库取出已存储的哈希密码
$storedHash = '$2y$12$...'; // 这里是你之前用password_hash生成的哈希值

// 用户提交的当前密码和新密码
$currentPassword = $_POST['current_password'];
$newPassword = $_POST['new_password'];

// 验证当前密码是否正确
if (password_verify($currentPassword, $storedHash)) {
    // 验证通过,生成新的哈希并更新数据库
    $newHash = password_hash($newPassword, PASSWORD_BCRYPT, ['cost' => 12]);
    // 这里写更新数据库的逻辑,把newHash存入对应字段
    echo "密码修改成功!";
} else {
    echo "当前密码输入错误,请重试!";
}

重要提醒

绝对不要尝试把原始密码明文存储在数据库里,这会带来极大的安全风险——一旦数据库泄露,所有用户的密码都会直接暴露。bcrypt的单向哈希设计,正是为了避免这种危险情况发生。

内容的提问来源于stack exchange,提问作者gdmorning

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:13:52