1.安装crypto-js
npm install crypto-js --save
2.编写encrypt.js
const CryptoJS = require('crypto-js');
import md5 from 'js-md5';
var key_str = 'B120F1D92561A123'; //16位12进制字符串 ---秘钥
var iv_str ='1A123B120F1D9256'; //16位12进制字符串 ---偏移量
var key = CryptoJS.enc.Utf8.parse(key_str);
var iv = CryptoJS.enc.Utf8.parse(iv_str);
//加密方法
export function Encrypt(str) {
let srcs = CryptoJS.enc.Utf8.parse(JSON.stringify(str));
var encrypted = CryptoJS.AES.encrypt(srcs, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
}
//解密方法
export function Decrypt(str) {
var decrypted = CryptoJS.AES.decrypt(str, key, {
iv: iv,
mode: CryptoJS.mode.CBC,
padding: CryptoJS.pad.Pkcs7
});
return JSON.parse(CryptoJS.enc.Utf8.stringify(decrypted));
}
key_str:加密秘钥
iv_str:偏移量
3.axios请求拦截 进行加解密
import {
Encrypt,
Decrypt
} from "./cryptoJS.js"
const service = axios.create({
baseURL: BASE_URL,
timeout: 30 * 1000
});
//请求拦截进行参数加密
service.interceptors.request.use(
config => {
if (config.method == 'get' && config.params) {
config.params.sign = objKeySort(config.params);
config.params = {
mini_sign: Encrypt(config.params)
}
}
if (config.method == 'post' && config.data) {
config.data.sign = objKeySort(config.data);
config.data = {
mini_sign: Encrypt(config.data)
}
}
return config;
},
error => {
// Do something with request error
Promise.reject(error);
}
);
// respone拦截器
service.interceptors.response.use(
response => {
//响应时进行解密
let data = response.data;
if (data.data && data.data.result) {
data.data = Decrypt(data.data.result);
}
return data;
},
error => {
Message({
message: error.message,
type: "error",
duration: 5 * 1000
});
return Promise.reject(error);
}
);