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

news/2024/11/5 16:09:16 标签: javascript, npm, react.js

react使用AES对称加密的实现

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

前言

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

使用CryptoJS库

引入:

npm i CryptoJS

密钥存放

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

REACT_APP_API_KEY = "后端给的密匙"

加密方法

javascript">// 加密
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
}

解密方法

javascript">// 解密
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.niftyadmin.cn/n/5739663.html

相关文章

HTML和CSS 介绍

HTML (HyperText Markup Language) 定义 HTML 是一种用于创建网页的标准标记语言。它由一系列的元素组成&#xff0c;这些元素通过标签表示&#xff0c;用于描述网页的结构和内容。 特点 结构化&#xff1a; HTML 使用标签来定义文档的结构&#xff0c;如 <head>, <…

java重要知识点 JVM基本结构

Java 虚拟机&#xff08;JVM&#xff09;是 Java 程序运行的基础环境&#xff0c;它将 Java 字节码转换为机器码&#xff0c;使得同一程序能够在不同平台上运行。JVM 的内部结构包括多个核心组件&#xff0c;协同工作以管理内存、执行代码和垃圾回收。 JVM 基本结构概览 JVM …

伍光和《自然地理学》电子书(含考研真题、课后习题、章节题库、模拟试题)

《自然地理学》&#xff08;第4版&#xff09;由伍光和、王乃昂、胡双熙、田连恕、张建明合著&#xff0c;于2018年11月出版。作为普通高等教育“十一五”国家级规划教材&#xff0c;本书不仅适用于高校地球科学各专业的基础课程&#xff0c;还可供环境、生态等有关科研、教学人…

数字IC后端实现Innovus 时钟树综合(Clock Tree Synthesis)典型案例

对于如下所示电路&#xff0c;要求以下几路做到等长&#xff0c;clock skew控制在50ps以内&#xff0c;clock tree insertion delay做到800ps! from FF/Q to FF1_1/D through the FF1 CK from FF/Q to FF2_1/D through the FF2 CK from FF/Q to FF3_1/D through the FF3 CK fr…

WEB组态可视化软件

官网网站&#xff1a;http://www.hcy-soft.com 体验地址&#xff1a;http://www.byzt.net:90 1.什么是组态&#xff1f; 组态的概念来自于20世纪70年代中期出现的第一代集散控制系统&#xff08;Distributed Control System&#xff09;&#xff0c;可理解为“配置”、“设置”…

前端通过nginx部署一个本地服务的方法

前端通过nginx部署一个本地服务的方法&#xff1a; 1.下载ngnix nginx 下载完成后解压缩后运行nginx.exe文件 2.打包你的前端项目文件 yarn build 把生成的dist文件复制出来&#xff0c;替换到nginx的html文件下 3.配置conf目录的nginx.conf文件 主要配置server监听 ser…

C++ unordered封装

C 哈希-CSDN博客 哈希表是unordered系列容器的底层逻辑&#xff0c;再实现了哈希的底层后&#xff0c;我们按照如下步骤封装unordered: 1. 改变数据类型&#xff0c;将HashTable中的所有的_kv都改成T 2. 因为map需要取key&#xff0c;写一个KeyOfT的仿函数并封装 3. iterator ,…

【React】初学React

A. react中如何创建元素呢&#xff1f; 说明一点&#xff1a; 属性都改为驼峰形式&#xff08;无障碍属性aria-*除外&#xff09;&#xff0c; class改成className 创建元素 B. 变量或表达式如何表示呢&#xff1f;大括号{ }包起来 变量值用大括号包裹 C. 元素和组件的区别 元素…