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中

相关推荐
开发者小天19 分钟前
调整为 dart-sass 支持的语法,将深度选择器/deep/调整为::v-deep
开发语言·前端·javascript·vue.js·uni-app·sass·1024程序员节
李少兄3 小时前
HTML 表单控件
前端·microsoft·html
学习笔记1014 小时前
第十五章认识Ajax(六)
前端·javascript·ajax
消失的旧时光-19434 小时前
Flutter 异步编程:Future 与 Stream 深度解析
android·前端·flutter
曹牧4 小时前
C# 中的 DateTime.Now.ToString() 方法支持多种预定义的格式字符
前端·c#
勿在浮沙筑高台4 小时前
海龟交易系统R
前端·人工智能·r语言
歪歪1005 小时前
C#如何在数据可视化工具中进行数据筛选?
开发语言·前端·信息可视化·前端框架·c#·visual studio
Captaincc5 小时前
AI 能帮你写代码,但把代码变成软件,还是得靠人
前端·后端·程序员
吃饺子不吃馅7 小时前
如何设计一个 Canvas 事件系统?
前端·canvas·图形学
theOtherSky7 小时前
element+vue3 table上下左右键切换input和select
javascript·vue.js·elementui·1024程序员节