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

如何在Ubuntu Shell中生成与Node.js bcrypt.hash兼容的密码哈希

实现Node.js bcrypt哈希与openssl passwd命令输出兼容的方法

你在Node.js中用await bcrypt.hash("my-password", 12)生成的是标准bcrypt格式哈希,默认cost因子为12,Ubuntu下的openssl passwd可以直接生成完全兼容的同格式结果,操作方法如下:

基础生成命令

直接生成对应cost因子12的bcrypt哈希,命令如下:

# 直接传入明文密码生成(明文会出现在shell历史中,仅测试用)
openssl passwd -bcrypt -rounds 12 "my-password"

如果要避免明文密码出现在命令行历史,使用stdin模式输入密码:

openssl passwd -bcrypt -rounds 12 -stdin
# 执行后输入你的密码回车即可,输入过程不会回显

与现有Node.js生成的哈希对齐验证

如果你需要生成和某条现有bcrypt哈希完全一致的结果,需要提取现有哈希中的盐值传入命令:

标准bcrypt哈希格式为$2b$[cost]$[22位盐][31位哈希值],例如$2b$12$EixZaYb6K2n1PnVqj2uW/eW8M7oX9eK4tZ8X7cV9b6N5M4K3J2H1的盐值为EixZaYb6K2n1PnVqj2uW/e

指定盐值的生成命令:

openssl passwd -bcrypt -rounds 12 -salt 「你提取的22位盐值」 "my-password"

执行后输出的哈希值和Node.jsbcrypt.hash方法用相同盐、相同cost生成的结果完全一致,可以直接用bcrypt.compare方法验证通过。

兼容性说明

  • openssl生成的bcrypt哈希默认使用$2b前缀,和Node.js bcrypt库的默认输出前缀完全一致,和旧版$2a前缀的bcrypt哈希也可以互通验证,不会影响密码匹配
  • Ubuntu 20.04及以上LTS版本的默认openssl包已内置bcrypt支持,无需额外安装依赖,更低版本如果执行报错可以先升级openssl到1.1.0及以上版本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:27:02