当前位置: 首页 > article >正文

【react使用AES对称加密的实现】

react使用AES对称加密的实现

  • 前言
  • 使用CryptoJS库
  • 密钥存放
  • 加密方法
  • 解密方法
  • 结语

前言

项目中要求敏感信息怕被抓包泄密必须进行加密传输处理,普通的md5加密虽然能解决传输问题,但是项目中有权限的用户是需要查看数据进行查询的,所以就不能直接使用md5加密,于是就想到了使用AES对称加密,就可以达到传输的时候加密,后端收到后可以解密查看

使用CryptoJS库

引入:

npm i CryptoJS

密钥存放

这里密钥的存放考虑到安全原因,如果在接口中可能会被抓取,在考虑实际使用情况后使用了前端环境变量存放的方法,密钥作为前端应用的环境变量进行配置。在打包或部署前端应用时,可以将密钥配置为环境变量,并在应用运行时通过环境变量读取密钥。这样可以将密钥从源代码中分离出来,避免意外泄露。
在项目根目录下面创建.env文件
在这里插入图片描述
写入代码

REACT_APP_API_KEY = "后端给的密匙"

加密方法

// 加密
export const encryptionTxt = (plaintext) => {
  if (!plaintext) { // 空值判断, 避免空值阻塞代码
    return ''
  }
  if (typeof plaintext !== 'string') {// 加密内容必须为字符串
    plaintext = String(plaintext)
  }
  // 从环境变量中拿密匙
  const mikey = process.env.REACT_APP_API_KEY
  const key = CryptoJS.enc.Utf8.parse(mikey)
  // 使用AES加密 (ECB模式)
  const encrypted = CryptoJS.AES.encrypt(plaintext, key, {
    mode: CryptoJS.mode.ECB, // ECB加密模式
    padding: CryptoJS.pad.Pkcs7, // 填充方式,常用Pkcs7
  })

  // 将加密后的数据转换为16进制字符串
  const encryptedHexStr = encrypted.ciphertext.toString(CryptoJS.enc.Hex)

  // 打印加密后的16进制字符串
  return encryptedHexStr
}

解密方法

// 解密
export const decryptText = (encryptedHexStr) => {
  if (!encryptedHexStr) {
    return ''
  }
  // 密钥 (需与加密时保持一致)
  const mikey = process.env.REACT_APP_API_KEY
  const key = CryptoJS.enc.Utf8.parse(mikey)

  // 将16进制字符串转换为二进制格式
  const encryptedData = CryptoJS.enc.Hex.parse(encryptedHexStr)

  // 使用AES ECB模式进行解密
  const decrypted = CryptoJS.AES.decrypt(
    { ciphertext: encryptedData }, // 数据格式应为CryptoJS的ciphertext格式
    key,
    {
      mode: CryptoJS.mode.ECB, // ECB模式
      padding: CryptoJS.pad.Pkcs7, // 填充方式
    }
  )

  // 转换解密后的数据为UTF-8字符串
  const decryptedText = decrypted.toString(CryptoJS.enc.Utf8)
  return decryptedText
}

结语

方法可以丢在工具目录下方便在页面中调用使用,我这个是在项目完成后才说加的功能,我就直接丢在until里面,然后在接口哪里把要传的值加密,页面里也是直接调用解密方法把加密的信息正常显示出来,对于保存密钥这个争议挺大的,放后端先使用公钥登录,获取权限后再发私钥也是一种方法,但是后端觉得只要在请求里其实就不安全,权衡之下使用的前端环境变量存放,前端环境变量存储的话如果用了git管理的,就把.env文件注释了,就别传到远端去了,这个是个小项目,其实加密不加密意义都不大,不知道做那种银行机密的码友们又是怎么处理的,可以在评论区讨论下,文中有啥不对的地方欢迎指正
在这里插入图片描述


http://www.kler.cn/a/382392.html

相关文章:

  • 用例怎么链接到其他地方的序列图
  • 自动化爬虫-selenium模块万字详解
  • NoSQL基础知识总结
  • Hadoop生态圈框架部署(四)- Hadoop完全分布式部署
  • w~自动驾驶~合集5
  • MMed-RAG:专为医学视觉语言模型设计的多功能多模态系统
  • SQL 基础语法(一)
  • 一个由Deno和React驱动的静态网站生成器
  • 详解I2S协议
  • Istio流量镜像测试
  • 前端跨域问题全解:JSONP、CORS 与代理服务器
  • 若依-侧边栏开关按钮禁用,侧边栏始终保持展开
  • 云计算虚拟机批量管理软件——未来之窗行业应用跨平台架构
  • 【c++丨STL】vector的使用
  • 2024年11月软考考前注意事项
  • 呼叫中心如何安排用户回访?
  • 【数据库】elasticsearch
  • 前端_安裝 json server
  • 记录新建wordpress站的实践踩坑:wordpress 上传源码新建站因权限问题导致无法访问、配置新站建站向导以及插件主题上传配置的解决办法
  • 【LeetCode】【算法】139. 单词拆分