前端用AES加密后端解不开,哪里出问题了?
我在前端用CryptoJS做AES加密,传给后端PHP,但后端死活解密失败,密钥和模式都对上了啊。
我用的是AES-128-CBC,密钥是16位字符串,还加了PKCS7填充。前端加密代码大概是这样:
const key = CryptoJS.enc.Utf8.parse('mysecretpassword');
const iv = CryptoJS.enc.Utf8.parse('1234567890123456');
const encrypted = CryptoJS.AES.encrypt('hello world', key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
console.log(encrypted.toString());
后端说收到的密文base64解码后长度不对,是不是我哪里序列化错了?
toString()得到的其实是CipherParams对象的特殊格式,不是纯密文。我的做法是这样修改前端代码:
然后后端PHP这样解密:
顺便吐槽下CryptoJS这个坑,我当时也折腾了好久才发现它返回的对象结构这么特别... 你试试看这样改应该就能通了!