crypto.js 前端加解密

881 阅读1分钟
/**

 * AES加密

 */

//@ts-ignore

import CryptoJS from "crypto-js";

  


//此处的密钥随机生成,可自行修改

const key = CryptoJS.enc.Utf8.parse("9627F8751BAC3190"); //十六位十六进制数作为密钥

const iv = CryptoJS.enc.Utf8.parse("AE14D873A093C352"); //十六位十六进制数作为密钥偏移量

  


//解密方法

export const Decrypt = function (val: any) {

  const encryptedHexStr = CryptoJS.enc.Hex.parse(val);

  const str = CryptoJS.enc.Base64.stringify(encryptedHexStr);

  const decrypt = CryptoJS.AES.decrypt(str, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });

  const decryptedStr = decrypt.toString(CryptoJS.enc.Utf8);

  return decryptedStr.toString();

};

  


//加密方法

export const Encrypt = function (val: any) {

  const str = CryptoJS.enc.Utf8.parse(val);

  const encrypted = CryptoJS.AES.encrypt(str, key, { iv: iv, mode: CryptoJS.mode.CBC, padding: CryptoJS.pad.Pkcs7 });

  return encrypted.ciphertext.toString();

};
// DES加密模式:CBC模式/ECB模式

//@ts-ignore

import CryptoJS from "crypto-js";

const KEY = "pb!@S@#@";

// CBC模式

// 加密

export const EncryptCBC = (text: string) => {

  // 密钥转成16进制的字符串

  const key = CryptoJS.enc.Utf8.parse(KEY);

  // 加密过程

  const encrypted = CryptoJS.DES.encrypt(text, key, {

    // iv偏移量为key值

    iv: key,

    // 模式为CBC

    mode: CryptoJS.mode.CBC,

    // DES加密padding为Pkcs7

    padding: CryptoJS.pad.Pkcs7,

  });

  // 加密返回为字符串密文(加密经过一次base64加密,结果可看结果)

  return encrypted.toString();

};

  


// 解密

export const DecryptCBC = (cipherText: string) => {

  const key = CryptoJS.enc.Utf8.parse(KEY);

  const decrypt = CryptoJS.DES.decrypt(cipherText, key, {

    iv: key,

    mode: CryptoJS.mode.CBC,

    padding: CryptoJS.pad.Pkcs7,

  });

  // 解密返回转为UTF-8明文(解密也经过一次base64解密)

  return decrypt.toString(CryptoJS.enc.Utf8);

};

  


// ECB模式

// 加密

export const EncryptECB = (text: string) => {

  //把私钥转换成16进制的字符串

  const key = CryptoJS.enc.Utf8.parse(KEY);

  //模式为ECB padding为Pkcs7

  const encrypted = CryptoJS.DES.encrypt(text, key, {

    mode: CryptoJS.mode.ECB,

    padding: CryptoJS.pad.Pkcs7,

  });

  return encrypted.toString();

};

  


// 解密

export const DecryptECB = (ciphertext: string) => {

  //把私钥转换成16进制的字符串

  const key = CryptoJS.enc.Utf8.parse(KEY);

  //把需要解密的数据从16进制字符串转换成字符byte数组

  const decrypted = CryptoJS.DES.decrypt(

    {

      ciphertext: CryptoJS.enc.Base64.parse(ciphertext),

    },

    key,

    {

      mode: CryptoJS.mode.ECB,

      padding: CryptoJS.pad.Pkcs7,

    }

  );

  //以utf-8的形式输出解密过后内容

  return decrypted.toString(CryptoJS.enc.Utf8);

};