|
75| 2
|
[项目] 【花雕动手做】CanMV K230 AI视觉识别模块之使用AES加密 |
![]() 什么是 CanMV K230? CanMV K230是一款高性价比的RISC-V边缘AI平台,凭借低功耗、强视觉处理能力和开放的开发生态,成为嵌入式AI开发的理想选择,尤其适合需要快速部署视觉与AI功能的创客、中小企业及教育场景。CanMV 是一套 AI 视觉开发平台,K230 是其核心芯片。该模块结合了图像采集、AI推理、边缘计算等能力,适合嵌入式视觉应用开发。 CanMV:类似 OpenMV 的图像处理框架,支持 Python 编程,简化视觉识别开发流程。 K230 芯片:嘉楠科技推出的 AIoT SoC,采用 RISC-V 架构,内置第三代 KPU(AI加速单元),算力高达 6 TOPS,性能是 K210 的 13.7 倍。 ![]() ![]() |
|
知识点 AES 是目前全球公认的最安全、应用最广泛的对称加密算法,全称为高级加密标准(Advanced Encryption Standard)。 它的核心是使用同一把密钥对数据进行加密和解密,加密和解密过程可逆,且密钥的安全性直接决定了数据的安全性。 AES 的核心特性 对称密钥:加密和解密使用完全相同的密钥,这意味着发送方和接收方必须提前安全地共享密钥。 固定分组长度:无论输入数据多长,都会将其分成固定大小的 “分组”(128 位)进行加密处理。 密钥长度可选:支持 128 位、192 位、256 位三种密钥长度,其中 AES-256 安全性最高,是金融、政府等领域的常用标准。 安全性高:自 2001 年被美国国家标准与技术研究院(NIST)确定为标准以来,至今未被发现有效的破解方法,能抵御绝大多数已知的攻击。 AES 的工作模式 ECB (Electronic Codebook):最简单的模式,直接对每个数据块独立加密 CBC (Cipher Block Chaining):每个明文块先与前一个密文块进行异或,再加密 CTR (Counter):利用计数器生成密钥流,与明文进行异或 GCM (Galois/Counter Mode):结合 CTR 模式并提供认证功能 AES 的主要应用场景 数据存储加密:手机、电脑硬盘的加密(如苹果的 FileVault)、数据库敏感字段加密(如用户身份证号、银行卡号)。 通信加密:HTTPS 协议、VPN 连接、即时通讯软件(如微信、Signal)的消息传输加密,保障数据在网络中传输时不被窃取。 设备与服务加密:智能家居设备的指令传输、云服务的数据加密存储,防止数据被未授权访问。 ![]() ![]() ![]() ![]() |
|
本帖最后由 驴友花雕 于 2025-11-4 09:13 编辑 【花雕动手做】CanMV K230 AI视觉识别模块之使用AES加密 项目测试实验代码 代码解析 这里来分析示例代码,代码使用了 MicroPython 中的 ucryptolib 模块演示 AES 加密: 1. 导入模块 这里导入了 MicroPython 中的加密库 ucryptolib,它是专为资源受限设备设计的轻量级加密库。 2. AES-128 ECB 模式测试 这里定义了: • 密钥 (key):长度为 16 字节,对应 AES-128 • 明文 (plaintext):要加密的数据,正好是 16 字节 这两行代码: 1. 创建一个 AES 加密器对象,使用 ECB 模式 2. 对明文进行加密,得到密文 这两行代码: 1. 创建一个新的 AES 对象(用于解密) 2. 对密文进行解密,得到解密后的数据 这行代码验证解密后的数据与原始明文是否相同,如果不同则报错。 3. 无效密钥长度测试 这段代码测试了使用不正确长度密钥的情况。AES 要求密钥长度必须是 16、24 或 32 字节,这里使用了一个较短的密钥,预期会抛出 ValueError 异常。 4. 数据长度不对齐测试 这段代码测试了数据长度不是 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 字节的数据。 实际应用注意事项 1. 安全性:ECB模式在实际应用中不安全,建议使用CBC等更安全的模式 2. 数据填充:对于非16字节倍数的数据,需要实现填充机制(如PKCS7) 3. 密钥管理:在实际应用中需要安全的密钥存储和传输机制 这段代码主要用于验证AES加密库在CanMV K230模块上的基本功能是否正常工作。 实验串口返回情况 ![]() 实验场景图 ![]() |
沪公网安备31011502402448© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed