历史搜索

前端使用CryptoJS加密解密

游客2024-10-03 07:30:01
目录文章目录
  1. 加密算法
  2. 下载 crypto-js
  3. 使用例子

CryptoJS 是一个 JavaScript 的加解密的工具包。它支持多种的算法:MD5、SHA1、SHA2、SHA3、RIPEMD-160 哈希散列,进行 AES、DES、Rabbit、RC4、Triple DES 加解密。

  • AES 高级加密标准,是下一代的加密算法标准,速度快,安全级别高
  • DES 数据加密标准,适用于大量数据加密
  • Triple DES 是 DES 的增强版
  • RC4 流加密算法,密钥长度可变
  • HmacSHA1 键控哈希算法(密钥与消息数据混合)

加密算法

1. 加密函数的参数是:(明文字符串, 密钥字符串,可选参数对象),返回密文字符串。

加密函数是:Cryptojs.AES.encryptCryptojs.DES.encrypt``,Cryptojs.Rabbit.encryptCryptojs.RC4.encryptCryptojs.TripleDES.encrypt

2. 解密函数的参数是:(密文字符串, 密钥字符串,可选参数对象),返回的结果必须用.toString(CryptoJS.enc.Utf8)转为明文。

解密函数是:CryptoJS.AES.decryptCryptoJS.DES.decryptCryptoJS.Rabbit.decryptCryptoJS.RC4.decryptCryptoJS.TripleDES.decrypt

其中可选参数对象常用属性:

  • mode:加密模式 【CBC、ECB、CFB、OFB、CTRGladman(CTR)】
  • paddig:填充方式 【 NoPadding、ZeroPadding、Pkcs7(Pkcs5)、Iso10126、Iso97971、AnsiX923】
  • vi: 偏移向量
  • formatter:自定义格式

下载 crypto-js

npm install crypto-js --save-dev
yarn add crypto-js --dev
// 或者下载 js 文件
https://cdnjs.cloudflare.com/ajax/libs/crypto-js/3.1.9-1/crypto-js.js

使用例子

以下代码是个人在项目中使用,仅供大家参考学习。

import CryptoJS from 'crypto-js';

// 默认的 KEY 与 iv
const getKEY = () => CryptoJS.enc.Utf8.parse('0123456789ABHAED'); // 十六位十六进制数作为密钥
const getIV = () => CryptoJS.enc.Utf8.parse('DYgjCEIMVrj2W9xA'); // 十六位十六进制数作为密钥偏移量

/**
 * AES 加密 :字符串 key iv  返回 base64
 */
export function encrypt(word) {
  const key = getKEY();
  const iv = getIV();
  const srcs = CryptoJS.enc.Utf8.parse(word);
  var encrypted = CryptoJS.AES.encrypt(srcs, key, {
    iv: iv,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.ZeroPadding,
  });
  return CryptoJS.enc.Base64.stringify(encrypted.ciphertext);
}

/**
 * AES 解密 :字符串 key iv  返回 base64
 *
 */
export function decrypt(word) {
  const key = getKEY();
  const iv = getIV();
  const base64 = CryptoJS.enc.Base64.parse(word);
  const src = CryptoJS.enc.Base64.stringify(base64);
  var decrypt = CryptoJS.AES.decrypt(src, key, {
    iv: iv,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.ZeroPadding,
  });
  var decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);
  return decryptedStr.toString();
}

推荐阅读:对 jsjiami.com.v6 加密结果如何进行手工解密