为什么RSA加密后的数据在服务端解密总是报错?

UX钰岩 阅读 37

我用前端的jsencrypt库做了RSA加密,后端用node.js的crypto模块解密,但一直报错说“error:040…数据无效”。加密用的是公钥文件里的—–BEGIN PUBLIC KEY—–格式内容,解密时用的是对应的私钥。明明密钥对是自己生成的,哪里出问题了?

前端代码是这样写的:const encrypt = new JSEncrypt(); encrypt.setPublicKey(pubKey); let encrypted = encrypt.encrypt(data);

后端用的是这段:

const crypto = require('crypto');
const privateKey = fs.readFileSync('private.key');
crypto.privateDecrypt({
  key: privateKey,
  padding: crypto.constants.RSA_PKCS1_OAEP_PADDING
}, Buffer.from(req.body.encrypted, 'base64'))

尝试过把前端加密的padding参数改了,但库好像不支持设置…难道是密钥格式不对?或者加密解密的padding方式不一致?

我来解答 赞 9 收藏
二维码
手机扫码查看
1 条解答
慧利 Dev
问题出在padding方式不一致,前端JSEncrypt默认使用PKCS1 v1.5填充,而后端用的是OAEP。改后端解密参数为RSA_PKCS1_PADDING就对了。

crypto.privateDecrypt({
key: privateKey,
padding: crypto.constants.RSA_PKCS1_PADDING
}, Buffer.from(req.body.encrypted, 'base64'))
点赞 7
2026-02-04 08:16