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
相关产品推荐
相关产品推荐

