视觉识别模块
0、学前先看&供电说明
1、固件下载与烧录
2、安装编程环境
3、调试运行例程
4、离线运行例程
5、Micropython 快速入门
6、GUI程序使用说明
7、二维云台安装教程
8、FPIOA引脚分配
9、RGB灯
10、蜂鸣器
11、按键
12、串口通信
13、I2C通讯
14、PWM
15、WDT看门狗
16、定时器计时
17、傅里叶变换
18、SHA256加密
19、AES加密
20、多线程
21、文件读写
22、图像显示
23、触摸显示
24、摄像头显示
25、图像翻转
26、照相机
27、绘制圆形
28、绘制矩形
29、绘制椭圆
30、绘制箭头
31、绘制十字准心
32、绘制文字
汝城县职业中等专业学校知识库-信息中心朱老师编辑
-
+
首页
19、AES加密
 > 本节内容较为复杂,需要有一定的理论基础。跳过这节不会影响学习后续的内容 > > 本节源码位于 \[ 源码汇总 / 02.Basic / 12.aes.py \] ## 什么是 AES? AES (Advanced Encryption Standard) 是一种对称加密算法,被广泛用于保护敏感数据。2001年,美国国家标准与技术研究院(NIST)将其确立为标准加密方法,取代了之前的 DES (Data Encryption Standard)。 ## AES 的基本特点 * **对称加密**:加密和解密使用相同的密钥 * **分组密码**:以固定长度的数据块为单位进行加密 * **密钥长度**:支持 128 位、192 位和 256 位三种密钥长度 * **分组大小**:固定为 128 位(16 字节) ## AES 的工作模式 AES 有多种工作模式,最常见的包括: 1. **ECB (Electronic Codebook)**:最简单的模式,直接对每个数据块独立加密 2. **CBC (Cipher Block Chaining)**:每个明文块先与前一个密文块进行异或,再加密 3. **CTR (Counter)**:利用计数器生成密钥流,与明文进行异或 4. **GCM (Galois/Counter Mode)**:结合 CTR 模式并提供认证功能 ## 代码解析 让我们来分析示例代码,这段代码使用了 MicroPython 中的 `ucryptolib` 模块演示 AES 加密: ### 1\. 导入模块 import ucryptolib 这里导入了 MicroPython 中的加密库 `ucryptolib`,它是专为资源受限设备设计的轻量级加密库。 ### 2\. AES-128 ECB 模式测试 key = b'1234567890abcdef' \# 16 字节的密钥 plaintext = b'This is 16 bytes' \# 16 字节的明文 这里定义了: * **密钥 (key)**:长度为 16 字节,对应 AES-128 * **明文 (plaintext)**:要加密的数据,正好是 16 字节 cipher = ucryptolib.aes(key, ucryptolib.MODE\_ECB) encrypted = cipher.encrypt(plaintext) 这两行代码: 1. 创建一个 AES 加密器对象,使用 ECB 模式 2. 对明文进行加密,得到密文 cipher = ucryptolib.aes(key, ucryptolib.MODE\_ECB) decrypted = cipher.decrypt(encrypted) 这两行代码: 1. 创建一个新的 AES 对象(用于解密) 2. 对密文进行解密,得到解密后的数据 assert decrypted == plaintext, "AES-128 ECB failed" 这行代码验证解密后的数据与原始明文是否相同,如果不同则报错。 ### 3\. 无效密钥长度测试 try: ucryptolib.aes(b'short\_key', ucryptolib.MODE\_ECB) assert False, "Invalid key not detected" except ValueError: print("Passed") 这段代码测试了使用不正确长度密钥的情况。AES 要求密钥长度必须是 16、24 或 32 字节,这里使用了一个较短的密钥,预期会抛出 `ValueError` 异常。 ### 4\. 数据长度不对齐测试 cipher = ucryptolib.aes(key, ucryptolib.MODE\_ECB) try: cipher.encrypt(b'short') assert False, "Unaligned data not detected" except ValueError: print("Passed") 这段代码测试了数据长度不是 16 字节倍数的情况。在 ECB 模式下,数据长度必须是 16 字节的倍数,这里使用了一个只有 5 字节的数据,预期会抛出 `ValueError` 异常。 ## AES 的重要概念解释 ### 1\. 密钥长度 * **AES-128**:使用 16 字节(128 位)密钥 * **AES-192**:使用 24 字节(192 位)密钥 * **AES-256**:使用 32 字节(256 位)密钥 密钥越长,安全性越高,但性能可能略有下降。 ### 2\. ECB 模式的局限性 示例代码使用了 ECB 模式,这是最简单但也是最不安全的 AES 模式: * 相同的明文块会产生相同的密文块 * 不能隐藏数据模式,可能泄露信息 * 没有使用初始化向量 (IV) 对于实际应用,推荐使用 CBC、CTR 或 GCM 等更安全的模式。 ### 3\. 填充问题 AES 要求数据长度是 16 字节的倍数。当数据长度不满足要求时,需要进行填充: * **PKCS#7 填充**:用缺少的字节数填充(最常用) * **零填充**:用 0 填充 * **ANSI X.923**:最后一个字节表示填充的字节数,其余填充 0 示例代码没有处理填充,而是直接使用了长度刚好是 16 字节的数据。
admin
2025年12月30日 14:18
转发
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
Word文件
PDF文档
PDF文档(打印)
分享
链接
类型
密码
更新密码
有效期
AI