Vue项目中crypto-js加密解密的封装(附完整代码)

  1. 导入 crypto-js 库;
   npm install crypto-js --save-dev
  1. 定义密钥 key 和密钥偏移量 iv ;

  2. 创建一个名为 crypto 的对象;

    加密实现过程

  3. 首先将待加密的数据转换为 CryptoJS.enc.Utf8 格式的字节序列。

  4. 使用相应的加密算法(如 AES、DES、Triple DES、Rabbit 或 RC4)对字节序列进行加密,使用给定的密钥、密钥偏移量;

  5. 将加密结果转换为字符串形式,并返回加密后的结果;

    解密实现过程

  6. 对于每个解密函数,首先将密文转换为 CryptoJS 支持的格式;

  7. 使用相应的解密算法对密文进行解密,使用给定的密钥、密钥偏移量;

  8. 将解密结果转换为字符串形式,返回解密的结果;

  9. 对于哈希函数 hashSHA256 ,使用 SHA256 算法对给定的数据进行哈希计算,并将结果转换为字符串形式返回;

  10. 最后,将 crypto 对象作为默认导出,放入main.js中全局注册或按需导入。

import CryptoJS from 'crypto-js';

const key = CryptoJS.enc.Utf8.parse('your key'); // 密钥
const iv = CryptoJS.enc.Utf8.parse('your iv'); // 添加密钥偏移量

const crypto = {
  // AES(高级加密标准)
  // AES 是一种对称加密算法,被广泛应用于保护数据的机密性
  // 它支持不同的密钥长度(128位、192位和256位)和多种加密模式(如 ECB、CBC 等)
  // AES 加密
  encryptAES(encryptData) {
    const srcs = CryptoJS.enc.Utf8.parse(encryptData);
    const encrypted = CryptoJS.AES.encrypt(srcs, key, {
      iv, // 使用密钥偏移量
      mode: CryptoJS.mode.CBC, // 使用 CBC 模式
      // 除了CBC(密码块链模式)之外
      // crypto-js 库还支持:
      // 1. ECB(电子密码本模式)2. CFB(密码反馈模式)3. OFB(输出反馈模式)4. CTR(计数器模式)
      padding: CryptoJS.pad.Pkcs7,
    });
    return encrypted.toString();
  },
  // AES 解密
  decryptAES(encryptData) {
    try {
      const decrypt = CryptoJS.AES.decrypt(encryptData, key, {
        iv, // 使用密钥偏移量
        mode: CryptoJS.mode.CBC, // 使用 CBC 模式
        padding: CryptoJS.pad.Pkcs7,
      });
      return CryptoJS.enc.Utf8.stringify(decrypt);
    } catch (error) {
      console.error('解密失败:', error.message);
      return null; // 返回 null 或其他自定义的错误标识
    }
  },
  // DES(数据加密标准)
  // DES 是一种对称加密算法,使用 56 位密钥对数据进行加密和解密
  // 它的密钥长度相对较短,易受到暴力破解等攻击方式的影响
  // DES 加密
  encryptDES(encryptData) {
    const srcs = CryptoJS.enc.Utf8.parse(encryptData);
    const encrypted = CryptoJS.DES.encrypt(srcs, key, {
      iv, 
      mode: CryptoJS.mode.CBC, 
      padding: CryptoJS.pad.Pkcs7,
    });
    return encrypted.toString();
  },
  // DES 解密
  decryptDES(encryptedData) {
    const decrypt = CryptoJS.DES.decrypt(encryptedData, key, {
      iv, 
      mode: CryptoJS.mode.CBC, 
      padding: CryptoJS.pad.Pkcs7,
    });
    return CryptoJS.enc.Utf8.stringify(decrypt);
  },
  // Triple DES(三重数据加密标准)
  // Triple DES 是对 DES 算法的改进,通过多次应用 DES 算法来增加密钥长度和安全性
  // 它使用两个或三个 56 位密钥,以不同的方式对数据进行加密和解密
  // 由于其较慢的处理速度,逐渐被 AES 替代。 
  // Triple DES 加密
  encryptTripleDES(encryptData) {
    const srcs = CryptoJS.enc.Utf8.parse(encryptData);
    const encrypted = CryptoJS.TripleDES.encrypt(srcs, key, {
      iv, 
      mode: CryptoJS.mode.CBC, 
      padding: CryptoJS.pad.Pkcs7,
    });
    return encrypted.toString();
  },
  // Triple DES 解密
  decryptTripleDES(encryptedData) {
    const decrypt = CryptoJS.TripleDES.decrypt(encryptedData, key, {
      iv, 
      mode: CryptoJS.mode.CBC, 
      padding: CryptoJS.pad.Pkcs7,
    });
    return CryptoJS.enc.Utf8.stringify(decrypt);
  },
  // Rabbit 是一种对称加密算法,它使用变长密钥和变长分组,具有较高的加密速度。
  // Rabbit 算法被设计为安全且高效的加密算法,适用于多种应用场景
  // Rabbit 加密
  encryptRabbit(encryptData) {
    const srcs = CryptoJS.enc.Utf8.parse(encryptData);
    const encrypted = CryptoJS.Rabbit.encrypt(srcs, key, {
      iv, 
    });
    return encrypted.toString();
  },
  // Rabbit 解密
  decryptRabbit(encryptedData) {
    const decrypt = CryptoJS.Rabbit.decrypt(encryptedData, key, {
      iv,
    });
    return CryptoJS.enc.Utf8.stringify(decrypt);
  },
  // RC4 是一种流密码算法,用于生成伪随机流,然后将其与数据进行异或运算以进行加密
  // RC4 算法简单且易于实现,但由于其存在一些安全漏洞,已经不再被广泛使用
  // RC4 加密
  encryptRC4(encryptData) {
    const encrypted = CryptoJS.RC4.encrypt(encryptData, key);
    return encrypted.toString();
  },
  // RC4 解密
  decryptRC4(encryptedData) {
    const decrypted = CryptoJS.RC4.decrypt(encryptedData, key);
    return decrypted.toString(CryptoJS.enc.Utf8);
  },
  // SHA256 哈希
  hashSHA256(data) {
    const hash = CryptoJS.SHA256(data);
    return hash.toString();
  },
};

export default crypto;

调用实现

let password = "BMW!123^^^4'0033@@@@()&&&34444\\****"
console.log(crypto.encryptAES(password))
// 加密结果:RCeW5/J/omqHZ4pi59HDI6i/T/FrAJ+BEN0R/nVLSZuQmJyUsNOAwjQWsfM4sxAm
console.log(crypto.decryptAES(crypto.encryptAES(password)))
// 解密结果:BMW!123^^^4'0033@@@@()&&&34444\****

Vue项目中crypto-js加密解密的封装(附完整代码)_第1张图片

你可能感兴趣的:(Vue,Vue2,+,IView,javascript,vue.js,前端)