VUE内使用AES(BCB)加解密
一、安装crypto-js依赖
npm install crypto-js --save-dev
二、在项目中新建一个公共js来存放封装的方法
  
三、下面在index.js文件中编写公共加解密方法
//引用AES源码js
import CryptoJS from "crypto-js/crypto-js"; 
//密钥放配置文件中,方便以后更新,密钥由服务端生成
const AES_KEY = process.env.API_AES_KEY;
/**
 * aes加密
 * @param {*} str 未加密字符串
 * @param {} key aes的key
 */
export const encrypt = function encrypt(str) {
    var key = CryptoJS.enc.Utf8.parse(AES_KEY);
    var encrypted = CryptoJS.AES.encrypt(str, key, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    });
    return encrypted.toString();
}
/**
 * aes解密
 * @param {*} miwen 待解密字符串
 * @param {} key aes的key
 */
export const decrypt = function decrypt(miwen) {
    var key = CryptoJS.enc.Utf8.parse(AES_KEY);
    var decryptedData = CryptoJS.AES.decrypt(miwen, key, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
    });
    return decryptedData.toString(CryptoJS.enc.Utf8);
}
四、调用方法
import { noEncryptUrlArr, encrypt, decrypt } from "./aes";  //引入(noEncryptUrlArr无需加密接口)
//加密参数
let instance = axios.create({
  baseURL: process.env.API_URL, // 请求的基础url
  timeout: 200000, // 请求超时的毫秒数
  withCredentials: true,// 请求携带cookie信息 保持session一致
})
// http请求拦截器
instance.interceptors.request.use(
  config => {
    config.headers = {
      'Content-Type': 'application/x-www-form-urlencoded',
    }
    if (noEncryptUrlArr.indexOf(config.url) === -1 && config.data) {//回调参数为空不解密
      config.data = {
        params: encrypt(JSON.stringify(config.data))
      }
    }
    config.data = qs.stringify(config.data);
    return config;
  },
  
  error => {
    return Promise.reject(error);
  }
);
//解密回调数据
// http响应拦截器
var   times = ''
instance.interceptors.response.use(
  res => {
    times  = new Date(res.headers.date).getTime()||0
    const resData = res.data;
    switch (resData.code * 1) {
      case 400:
        doSomething();
        return resData;
      case 401: // 重新授权
        doSomething();
        return null;
      default:   
        if (noEncryptUrlArr.indexOf(res.config.url) == -1 && resData.data && typeof resData.data == "string") {
          resData.data = JSON.parse(decrypt(resData.data));
        }
      return resData;  
    }
  }
                    
                
                
            
        
浙公网安备 33010602011771号