0
点赞
收藏
分享

微信扫一扫

vue_AES加密的封装和使用

自由情感小屋 2022-03-10 阅读 48
vue.js

简介

  AES——高级加密标准(AES,Advanced Encryption Standard)为最常见的对称加密算法(微信小程序加密传输就是用这个加密算法的)。对称加密算法也就是加密和解密用相同的密钥。

封装

  在src下新建一个utils文件夹,专门用来存放封装的工具。然后在utils文件夹中新建一个AES.js文件,将封装好的函数写到里面。

// 引入CryptoJS
const CryptoJS = require("crypto-js");

// 偏移量
const iv = CryptoJS.enc.Utf8.parse('a1b2c3d4e5f6g7h8');

/**
 * @desc AES加密
 * @param {String} signKey - 加密的秘钥
 * @param {String} stringData - 需要加密的数据;
 */
export const aesEncrypt = (stringData) => {
  const key = CryptoJS.enc.Utf8.parse(signKey);
  const srcs = CryptoJS.enc.Utf8.parse(stringData);
  /**
   * CipherOption, 加密的一些选项:
   * mode: 加密模式, 可取值(CBC, CFB, CTR, CTRGladman, OFB, ECB), 都在 CryptoJS.mode 对象下
   * padding: 填充方式, 可取值(Pkcs7, AnsiX923, Iso10126, Iso97971, ZeroPadding, NoPadding), 都在 CryptoJS.pad 对象下
   * iv: 偏移量, mode === ECB 时, 不需要 iv
   * 返回的是一个加密对象
   */
  const cipher = CryptoJS.AES.encrypt(srcs, key, {
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.ZeroPadding,
    iv,
  });
  return cipher.ciphertext.toString().toUpperCase();
}

/**
 * @desc AES解密;
 * @param {string} key - 加密使用的 key;
 * @param {string} encrypted - 加密的数据;
 */
export const aesDecrypt = (encrypted, key) => {
  const obj = CryptoJS.enc.Hex.parse(encrypted);
  const srcs = CryptoJS.enc.Base64.stringify(obj);
  // 这里 mode, padding, iv 一定要跟加密的时候完全一样
  // 返回的是一个解密后的对象
  const decipher = CryptoJS.AES.decrypt(srcs, key, {
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.ZeroPadding,
    iv,
  });
  // 将解密对象转换成 UTF8 的字符串
  const resultDecipher = CryptoJS.enc.Utf8.stringify(decipher);
  // 返回解密结果
  return resultDecipher.toUpperCase();
}

调用

import {aesEncrypt} from "../../../utils/AES";

// 调用加密函数
 const encrypted = aesEncrypt('1234567');
// 调用解密函数
 const decrypted = aesDecrypt(encrypted, key);
举报

相关推荐

0 条评论