前端请求后端接口进行参数加密处理:
const CryptoJs = require('crypto-js');
const defaultKey = "zoe_nurse_qazxr8"; // 默认的key
const defaultIv = "qwertyuiopasdfgh"; // 默认的key 偏移量
/**
* 加密方法
* @param: str 需要加密的字符
* @param: key 密钥
* @param: iv 密钥偏移量
*/
function encrypt(str, key, iv) {
const keyStr = key ? encParse(key) : encParse(defaultKey);
const ivStr = iv ? encParse(iv) : encParse(defaultIv);
const encryptedStr = CryptoJs.AES.encrypt(str, keyStr, {
iv: ivStr,
mode: CryptoJs.mode.CBC,
padding: CryptoJs.pad.Pkcs7
});
// 直接toString()是base64格式的字符串
// ciphertext.toString() 是128位的字符串
return encryptedStr.toString();
}
/**
* 解密方法
* @param: str 需要解密的字符
* @param: key 密钥
* @param: iv 密钥偏移量
*/
function decrypt(str, key, iv) {
const keyStr = key ? encParse(key) : encParse(defaultKey);
const ivStr = iv ? encParse(iv) : encParse(defaultIv);
// 判断str是否为base64,如果不是就要转base64,是了就不能再转
const flag = isBase64(str);
if (!flag) {
// 转为base64之前要先转16进制
str = CryptoJs.enc.Hex.parse(str);
// 只有base64格式的字符才能被解密
str = CryptoJs.enc.Base64.stringify(str);
}
const encryptedStr = CryptoJs.AES.decrypt(str, keyStr, {
iv: ivStr,
mode: CryptoJs.mode.CBC,
padding: CryptoJs.pad.Pkcs7