zoukankan      html  css  js  c++  java
  • 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;  
        }
      }
    

      

  • 相关阅读:
    NPOI读取excel表,如果有公式取出的是公式,想要取数字怎么办?
    win7 64位安装redis 及Redis Desktop Manager使用
    .net实现md5加密 sha1加密 sha256加密 sha384加密 sha512加密 des加密解密
    用户、角色、权限数据库设计
    C#实现手机发送验证码
    遍历页面上的checkbox
    Http简介
    HTTP深入浅出 http请求
    最好用的js前端框架、组件、文档在线预览插件
    windows下nginx安装、配置与使用
  • 原文地址:https://www.cnblogs.com/JQstronger/p/VUE_AES.html
Copyright © 2011-2022 走看看