混合加密中为什么RSA加密后的数据用AES解密会失败?
我在做混合加密时遇到问题:前端用RSA公钥加密了AES的对称密钥,但后端用RSA私钥解密后得到的数据,用AES解密明文总是失败。
尝试过检查密钥长度和算法配置,但没发现问题。比如下面这段加密代码,是不是哪里处理错了?后端解密时提示”Invalid AES key”
const crypto = require('crypto');
// 生成AES密钥
const aesKey = crypto.randomBytes(32);
// 用RSA公钥加密AES密钥
const encryptedKey = crypto.publicEncrypt({
key: '-----BEGIN PUBLIC KEY-----n...RSA公钥...n-----END PUBLIC KEY-----',
padding: crypto.constants.RSA_PKCS1_OAEP_PADDING
}, aesKey);
// 发送给后端的数据
const payload = {
encryptedKey: encryptedKey.toString('base64'),
cipherText: crypto.createCipheriv('aes-256-cbc', aesKey, iv).update(data)
};
后端用RSA私钥解密后的密钥直接拿去解密报错,但单独用AES加密解密测试是正常的。是不是加密流程顺序有问题?或者密钥格式需要转换?
后端代码改这里:
记住,加密解密时所有中间数据都尽量用Buffer,别乱转字符串,不然容易坏数据。