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中

相关推荐
中微子几秒前
RESTful架构与前后端路由演进:构建现代化Web应用的核心规范
前端
前端付豪几秒前
13、表格系统架构:列配置、嵌套数据、复杂交互
前端·javascript·架构
南屿im7 分钟前
发布订阅模式和观察者模式傻傻分不清?一文搞懂两大设计模式
前端·javascript
I_have_a_lemon7 分钟前
前端、产品、设计师神器推荐——Onlook
前端·cursor
前端小巷子8 分钟前
深入解析CSRF攻击
前端·安全·面试
JustHappy9 分钟前
SPA?MPA?有啥关系?有啥区别?聊一聊页面形态 or 路由模式
前端·javascript·架构
每天开心9 分钟前
🧙‍♂️闭包应用场景之--防抖和节流
前端·javascript·面试
hxmmm14 分钟前
webpack多入口打包文件
前端
CAD老兵16 分钟前
前端组件库的多主题实现原理与实战指南
前端
归于尽17 分钟前
Generator?从 yield 卡壳,到终于搞懂协程那点事
前端·javascript