前端怎么对接口参数做加密才安全?
我们项目现在要对所有请求参数加密,后端用的是 AES,但我在前端用 crypto-js 加密后,后端老是解密失败,说 padding 不对。我试过 ECB 和 CBC 模式都不行,是不是前端根本不能做这种加密?
这是我的加密代码:
import CryptoJS from 'crypto-js';
const key = CryptoJS.enc.Utf8.parse('1234567890123456');
const encrypted = CryptoJS.AES.encrypt('{"id":123}', key, {
mode: CryptoJS.mode.ECB,
padding: CryptoJS.pad.Pkcs7
}).toString();
AES.encrypt默认输出的是 OpenSSL 格式(带头的 Base64),不是纯密文。后端直接解"裸"密文当然失败。把代码改成这样:
如果后端用的是 Hex,改成
encrypted.ciphertext.toString(CryptoJS.enc.Hex)。另外 CBC 模式记得前后端用同一个 IV,别忘了 iv 也是要 Base64 编码后传输的。