为什么RSA加密后的数据在服务端解密总是报错?
我用前端的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方式不一致?
慧利 Dev
Lv1
问题出在padding方式不一致,前端JSEncrypt默认使用PKCS1 v1.5填充,而后端用的是OAEP。改后端解密参数为RSA_PKCS1_PADDING就对了。
点赞
7
2026-02-04 08:16