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

      

  • 相关阅读:
    记第一场cf比赛(Codeforces915)
    Uva11468:Substring
    Uva11732:"strcmp()" Anyone?
    Uva1014:Remember the Word
    洛谷P2502:[HAOI2006]旅行
    bzoj3677: [Apio2014]连珠线
    bzoj4906: [BeiJing2017]喷式水战改
    海上孤独的帆
    Treap基本用法总结
    noip2017考前基础复习——数论数学
  • 原文地址:https://www.cnblogs.com/JQstronger/p/VUE_AES.html
Copyright © 2020-2023  润新知