项目中用到AES算法做传输加密的优点。
1、对内存的需求非常低,适合于受限环境。
2、运算速度快。
3、分组长度和密钥长度设计灵活。
4、很好的抵抗差分密码分析及线性密码分析的能力。
5、AES的密钥长度比DES大,它也可设定为32比特的任意倍数,最小值为128比特,最大值为256比特,所以用穷举法是不可能破解的。

简单说一下
1、安装crypto-js依赖

npm install crypto-js --save-dev

2、创建配置文件AES.js
路径可以按照这个src/utils/AES.js

import CryptoJS from "crypto-js";
//随机生成指定数量的32进制key
export default {
  generatekey(num) {
    let library =
      "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
    let key = "";
    for (let i = 0; i < num; i++) {
      let randomPoz = Math.floor(Math.random() * library.length);
      key += library.substring(randomPoz, randomPoz + 1);
    }
    return key;
  },
  //加密
  encrypt(word, keyStr) {
   // 判断是否存在keyStr,不存在就用默认的keyStr(注意:这个keyStr必需要前后端统一,不然双方加密解密后会不相同。调用generatekey方法生成)
    keyStr = keyStr ? keyStr : "1grLx91U40VawzhRAm7E";
    let key = CryptoJS.enc.Utf8.parse(keyStr);
    let srcs = CryptoJS.enc.Utf8.parse(word);
    let encrypted = CryptoJS.AES.encrypt(srcs, key, {
      mode: CryptoJS.mode.ECB,
      padding: CryptoJS.pad.Pkcs7
    });
    return encrypted.toString();
  },
  //解密
  decrypt(word, keyStr) {
    keyStr = keyStr ? keyStr : "1grLx91U40VawzhRAm7E";
    let key = CryptoJS.enc.Utf8.parse(keyStr);
    let decrypt = CryptoJS.AES.decrypt(word, key, {
      mode: CryptoJS.mode.ECB,
      padding: CryptoJS.pad.Pkcs7
    });
    return CryptoJS.enc.Utf8.stringify(decrypt).toString();
  }
};

3、使用
因为用的地方比较多我直接挂载在vue的prototype上方便我直接调用,在main.js中加加上以下代码。

import AES from './utils/AES';
Vue.prototype.$aes = AES;

例:

// 注意:如果是对象/数组的话,需要先转换成字符串
//调用加密方法
let cars = '离谱到家158855515485451'
let encrypts = this.$aes.encrypt(cars);

//调用解密方法
let dess = this.$aes.decrypt("P2Cq833yWdH8se2rHTbxlx6pFIQpdJ9515hNIIi5rlU=");

console.log("加密",encrypts);
console.log("解密",dess);
Logo

前往低代码交流专区

更多推荐