美文网首页
关于 vue中使用crypto-js,进行DES 的加密解密

关于 vue中使用crypto-js,进行DES 的加密解密

作者: 冷山冷杉 | 来源:发表于2019-06-11 14:39 被阅读0次

在 util.js引入 import CryptoJS from 'crypto-js'

  • message: 需要加解密的文本
  • key: 加解密的秘钥
  • iv: 偏移量,最短8位数,ecb模式不需要此参数

CBC加密 Pkcs7填充方式


const encryptByDES = function (message, key, iv) {
  const keyHex = CryptoJS.enc.Utf8.parse(key) // 秘钥
  const iv = CryptoJS.enc.Utf8.parse(iv) // 偏移量
  const encrypted = CryptoJS.DES.encrypt(message, keyHex, {
    iv: iv,
    mode: CryptoJS.mode.CBC, // 加密模式
    padding: CryptoJS.pad.Pkcs7
  })
  return encrypted.ciphertext.toString() //  加密出来为 hex格式密文
}

解密环节

// DES解密
const decryptByDES = function (ciphertext, key, iv) {
  const keyHex = CryptoJS.enc.Utf8.parse(key)
  const iv = CryptoJS.enc.Utf8.parse(iv)
  const decrypted = CryptoJS.DES.decrypt({
    ciphertext: CryptoJS.enc.Hex.parse(ciphertext)
  }, keyHex, {
    iv: iv,
    mode: CryptoJS.mode.CBC,
    padding: CryptoJS.pad.Pkcs7
  })
  return decrypted.toString(CryptoJS.enc.Utf8)
}

┈━═┈━═┈━═┈━═┈━═☆ 分 ┈━═┈━═┈━═┈━═┈━═☆ 割 ┈━═┈━═┈━═┈━═┈━═☆ 线

今天碰到一个坑,关于支付密码,需要返回base64格式的密文 在博客园看到一个样例,成功填坑!

3DES加密,加密格式 ECB,返回base64格式

function pswdEncryptByDES(string, key) {
  const KeyHex = CryptoJS.enc.Utf8.parse(key);
  const encrypted = CryptoJS.TripleDES.encrypt(string,
    KeyHex, {
      mode: CryptoJS.mode.ECB,  // ecb模式不需要偏移量
      padding: CryptoJS.pad.Pkcs7
    });

  let hexstr = encrypted.toString(); // 此方式返回base64格式
 //  encrypted.ciphertext.toString() 如果是这么写 那就返回hex格式的密文了
  return hexstr;
}

解密环节

function Decrypt3Des(base64str, aStrKey, ivstr) {
  const KeyHex = CryptoJS.enc.Utf8.parse(aStrKey); // 将key转换成 wordArray
// 因为是base64的密文,所以不用转16进制hex
  const decrypted = CryptoJS.TripleDES.decrypt(base64str, KeyHex, { 
    mode: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.Pkcs7,
    iv: CryptoJS.enc.Utf8.parse(ivstr)
  });
  return decrypted.toString(CryptoJS.enc.Utf8);
}

┈━═┈━═┈━═┈━═┈━═☆ 分 ┈━═┈━═┈━═┈━═┈━═☆ 割 ┈━═┈━═┈━═┈━═┈━═☆ 线

3DES加密,加密格式 ECB,返回HEX格式

function pswdEncryptByDES(string, key) {
  const KeyHex = CryptoJS.enc.Utf8.parse(key);
  const encrypted = CryptoJS.TripleDES.encrypt(string,
    KeyHex, {
      mode: CryptoJS.mode.ECB,  // ecb模式不需要偏移量
      padding: CryptoJS.pad.Pkcs7
    });

  // let hexstr = encrypted.toString(); // 此方式返回base64
 encrypted.ciphertext.toString() // 返回hex格式的密文
  return hexstr;
}

解密环节

function Decrypt3Des(hexStr, aStrKey, ivstr) {
  const KeyHex = CryptoJS.enc.Utf8.parse(aStrKey);

  //第一步把16进制字符串转为WordArray格式
   const WordArray = CryptoJS.enc.Hex.parse(hexStr);
  //第二步把WordArray再转为base64的字符串
   const base64str = CryptoJS.enc.Base64.stringify(WordArray);
  //第三步再进行解密
  const decrypted = CryptoJS.TripleDES.decrypt(base64str, KeyHex, {
    mode: CryptoJS.mode.ECB,
    padding: CryptoJS.pad.Pkcs7,
    iv: CryptoJS.enc.Utf8.parse(ivstr)
  });

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

相关文章

网友评论

      本文标题:关于 vue中使用crypto-js,进行DES 的加密解密

      本文链接:https://www.haomeiwen.com/subject/xvqqfctx.html