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;  
    }
  }

  

 

posted @ 2020-04-20 17:08  正在变厉害的路上  阅读(648)  评论(0编辑  收藏  举报