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

Node.js crypto生成加密私钥后解密报错:Passphrase required for encrypted key

解决Node.js crypto.privateDecrypt解密带密码私钥的错误

我完全懂你的困惑!你明明生成私钥的时候设置了passphrase,为啥解密时还提示需要密码?问题出在你调用privateDecrypt的方式上——你直接传了加密后的私钥字符串,但这个方法需要知道解密私钥本身的密码才能正常工作。

问题原因

你生成私钥时配置了cipher: 'aes-256-cbc'和passphrase: 'top secret',这意味着保存到key.pem的私钥是加密后的密文,不是明文私钥。而crypto.privateDecrypt如果接收的是加密的PEM密钥,不能直接传字符串,必须传入一个包含密钥和密码的配置对象。

修复后的解密代码

把你的解密代码改成这样,明确传入解密私钥所需的密码:

fs.readFile("key.pem", "utf8", (err, data) => {
  if (err) throw err;
  
  const content = crypto.privateDecrypt(
    {
      key: data,
      passphrase: 'top secret' // 必须和生成密钥时的passphrase一致
    },
    Buffer.from(c, "base64")
  );
  
  console.log(content.toString()); // 处理解密后的明文内容
});

补充说明

crypto.privateDecrypt的第一个参数支持两种形式:

  • 如果是未加密的明文私钥,可以直接传PEM格式的字符串
  • 如果是加密后的私钥,必须传配置对象,除了key和passphrase,还可以根据需要添加padding、oaepHash等其他选项

这样修改后,就能正常解密了!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 16:58:13