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

AES介绍以及应用(crypto.js 实现数据加密)

AES介绍以及使用

介绍

AES(Advanced Encryption Standard)是一种对称加密算法,广泛用于保护敏感数据的安全传输和存储。以下是关于AES的详细解析:

1、什么是AES

  • 对称加密:加密和解密使用相同的密钥。
  • 块加密:将数据分成固定大小的块(128位)进行加密。
  • 标准化:2001年被美国国家标准与技术研究院(NIST)选为替代DES的新一代加密标准。

2、密钥长度

AES支持三种密钥长度:

密钥长度

轮数

安全性

128

10轮

192

12轮

更高

256

14轮

最高

:密钥越长,安全性越高,但计算开销也更大。

3、AES 的工作原理

(1)加密过程

AES加密分为多个步骤:

  1. 密钥扩展(Key Expansion:生成多轮加密所需的子密钥。
  2. 初始轮(AddRoundKey:明文与第一轮密钥异或。
  3. 多轮加密(10/12/14轮)
    • SubBytes(字节替换):使用S盒进行非线性替换。
    • ShiftRows(行移位):对数据块的行进行循环移位。
    • MixColumns(列混淆):对列进行矩阵运算。
    • AddRoundKey(轮密钥加):与子密钥异或。
  4. 最终轮:省略MixColumns步骤。

(2)解密过程

解密是加密的逆过程,使用相同的密钥但步骤相反。

4、AES 的工作模式

AES支持多种加密模式,适用于不同场景:

模式

描述

适用场景

ECB

电子密码本模式,每块独立加密(相同明文→相同密文)

简单数据加密(不推荐敏感数据)

CBC

密码块链接模式,每块与前一块密文异或(需要初始化向量IV)

文件加密、SSL/TLS

GCM

伽罗瓦计数器模式,支持认证加密(AEAD),高效且安全

网络通信(如HTTPS)

CTR

计数器模式,将块密码转换为流密码,可并行加密

实时数据流(如视频加密)

OFB

输出反馈模式,将块密码转换为流密码

较少使用

推荐GCM(认证加密)或 CBC(兼容性好)是当前最常用的模式。

5、 AES 的安全性

  • 数学基础牢固:基于代换-置换网络(SPN),难以破解。
  • 密钥空间大:AES-256的密钥空间为2²⁵⁶,暴力破解几乎不可能。
  • 抗已知攻击:对线性攻击、差分攻击等有强抵抗力。

AES实战

这里我们用vue + spring boot项目,来实现

Vue

下载crypto-js

npm install crypto-js

新建aes.js 工具文件

  

import CryptoJS from 'crypto-js'/*** pad: Pkcs7 //前端 Pkcs7 对应 后端 Pkcs5*///注意这是在测试环境密钥这么写,实际因该写在环境变量里const KEY = CryptoJS.enc.Utf8.parse('12345678123456781234567812345678') // 秘钥// 生成随机的iv,长度为16字节const iv = CryptoJS.lib.WordArray.random(16)export const Encrypt = (plaintext) => {let ciphertext = CryptoJS.AES.encrypt(plaintext, KEY, {iv: iv,mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7,}).toString()return ciphertext}/*** AES 解密*/export const Decrypt = (jsonStr) => {let plaintext = CryptoJS.AES.decrypt(jsonStr, KEY, {iv: iv,mode: CryptoJS.mode.ECB,padding: CryptoJS.pad.Pkcs7,}).toString(CryptoJS.enc.Utf8)return plaintext}

在发送请求时这样写:

import { Encrypt, Decrypt } from '@/utils/aes.js'

//加密数据const encrypted = Encrypt(JSON.stringify(newChat))// request.post('/chat/save', { id: newId, title: newChat.title });request.post('/chat/save', {  data: encrypted });

Spring boot :

添加依赖

<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>2.0.42</version>
</dependency>

写入工具类:

// 32字节密钥(必须与前端一致)
private static final String AES_KEY = "12345678123456781234567812345678";/*** AES-ECB 解密*/
public static String decrypt(String encryptedData) throws Exception {// 1. 初始化解密器Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");cipher.init(Cipher.DECRYPT_MODE,new SecretKeySpec(AES_KEY.getBytes(), "AES"));// 2. 执行解密byte[] decrypted = cipher.doFinal(Base64.getDecoder().decode(encryptedData));return new String(decrypted);
}

在控制层中:

@PostMapping("/chat/save")
public Result add(@RequestBody EncryptedRequest request) throws Exception {System.out.println(request.getData());//解密请求的数据String data = AESUtil.decrypt(request.getData());ChatList chatList = JSON.parseObject(data, ChatList.class);System.out.println(chatList);//保存会话chatService.save(chatList);return Result.success();
}

可以看到他的加密与解密结果:

http://www.xdnf.cn/news/20045.html

相关文章:

  • Ubuntu 24.04 中 nvm 安装 Node 权限问题解决
  • 2020年_408统考_数据结构41题
  • #数据结构----2.1线性表
  • 谈谈你对ThreadLocal的理解
  • 2025数学建模国赛高教社杯B题思路代码文章助攻
  • C++字符串字符替换程序
  • 【系统架构设计(16)】软件架构设计二:软件架构风格:构建系统的设计模式与选择指南
  • 学习机器学习能看哪些书籍
  • 白盒审计绕过
  • [bat-cli] docs | 控制器
  • 网络计算工具ipcalc详解
  • C++11 智能指针的使⽤及其原理
  • A股大盘数据-20250904分析
  • SAP HANA Scale-out 01:表分布
  • Vue.js 面试题集合
  • 钉钉 AI 深度赋能制造业 LTC 全流程:以钉钉宜搭、Teambition 为例
  • 【C++】计算地球上两个地理坐标点之间的距离和航向角
  • 期货市场上证50期权沪深300期权中证500期权那个好?
  • git命令行打patch
  • 支付域——支付与交易概念
  • 龙虎榜——20250904
  • 深度剖析:智能驾驶到底给2025带来了什么
  • 用服务器搭 “私人 AI 助手”:不用联网也能用,支持语音对话 / 文档总结(教程)
  • Hoppscotch:开源轻量API测试工具,秒启动高效解决临时接口测试需求
  • git基础命令 git基础操作
  • PyTorch DDP 随机卡死复盘
  • < 自用文 OS 有关 > (续)发现正在被攻击 后的自救 Fail2ban + IPset + UFW 工作流程详解
  • 十四、STM32-----低功耗
  • 【前端教程】JavaScript DOM 操作案例解析与代码优化
  • 不用服务器也能监控网络:MyIP+cpolar让中小企业告别昂贵方案