CryptoJS hex模式前端

CryptoJS

加密:

javascript 复制代码
aesJson (str, secretKey, aesIv, padding) {
  let key
  let iv
  key = CryptoJS.enc.Utf8.parse(secretKey)
  iv = CryptoJS.enc.Utf8.parse(aesIv)
  let plaintText = str // CryptoJS.enc.Utf8.parse(str) 明文string
  let encrypted = CryptoJS.AES.encrypt(plaintText, key, {
    iv: iv,
    mode: CryptoJS.mode.CBC,
    padding: padding && CryptoJS.pad.Pkcs7
  })
  let data2
  if (padding) {
    data2 = encrypted.ciphertext.toString()
  } else {
    data2 = encrypted.toString() // 加密后的数据
  }
  return data2
}

加密注意:hex 模式生成密文只去加密后ciphertext里面的数据,转json

解密:

javascript 复制代码
function decrypt (data, secretKey, aesIv, padding) {
  // key,iv:16位的字符串
  let encryptedBase64Str
  if (padding) {
    // Hex 模式解密
    encryptedBase64Str = {ciphertext:  CryptoJS.enc.Hex.parse(data) }
  } else {
    encryptedBase64Str = data
  }
  let key
  let iv
  key = CryptoJS.enc.Utf8.parse(secretKey)
  iv = CryptoJS.enc.Utf8.parse(aesIv)
  // console.log(data, encryptedBase64Str)
  let decrypted = CryptoJS.AES.decrypt(encryptedBase64Str, key, {
    iv: iv,
    mode: CryptoJS.mode.CBC,
    padding: padding && CryptoJS.pad.Pkcs7
  })
  // return JSON.parse(decrypted.toString(padding ? CryptoJS.enc.Hex : CryptoJS.enc.Utf8))
  return JSON.parse(decrypted.toString(CryptoJS.enc.Utf8))
}

注意:解密需对密文先进行hex转译,然后使用放在对象ciphertext中

坑:

Malformed UTF-8 data(报错)解密时没有,对密文先进行hex转译,然后使用放在对象ciphertext中

相关推荐
韭菜炒大葱35 分钟前
前端经典面试题:从 URL 输入到页面展示,中间经历了什么?
前端·http·面试
swipe43 分钟前
纯函数、柯里化与函数组合:从原理到源码,构建更可维护的前端代码体系
前端·javascript·面试
远山枫谷44 分钟前
uniapp + Vue 自定义组件封装:自定义样式从入门到实战
前端·vue.js
Lee川1 小时前
JavaScript 中的 `this` 与变量查找:一场关于“身份”与“作用域”的深度博弈
前端·javascript·面试
Kakarotto3 小时前
Canvas 直线点击事件处理优化
javascript·vue.js·canvas
顺遂3 小时前
基于Rokid CXR-M SDK的引导式作业辅导系统设计与实现
前端
代码搬运媛3 小时前
Generator 迭代器协议 & co 库底层原理+实战
前端
前端拿破轮3 小时前
从0到1搭建个人网站(三):用 Cloudflare R2 + PicGo 搭建高速图床
前端·后端·面试
功能啥都不会3 小时前
PM2 使用指南 - 踩坑记录
前端
HelloReader3 小时前
React 中 useState、useEffect、useRef 的区别与使用场景详解,终于有人讲明白了
前端