75浏览
查看: 75|回复: 2

[项目] 【花雕动手做】CanMV K230 AI视觉识别模块之使用AES加密

[复制链接]
【花雕动手做】CanMV K230 AI视觉识别模块之使用AES加密图1

什么是 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 倍。


【花雕动手做】CanMV K230 AI视觉识别模块之使用AES加密图3

【花雕动手做】CanMV K230 AI视觉识别模块之使用AES加密图2

驴友花雕  高级技神
 楼主|

发表于 2025-11-4 08:25:46

【花雕动手做】CanMV K230 AI视觉识别模块之使用AES加密

知识点
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)的消息传输加密,保障数据在网络中传输时不被窃取。
设备与服务加密:智能家居设备的指令传输、云服务的数据加密存储,防止数据被未授权访问。

【花雕动手做】CanMV K230 AI视觉识别模块之使用AES加密图1

【花雕动手做】CanMV K230 AI视觉识别模块之使用AES加密图2

【花雕动手做】CanMV K230 AI视觉识别模块之使用AES加密图3

【花雕动手做】CanMV K230 AI视觉识别模块之使用AES加密图4

回复

使用道具 举报

驴友花雕  高级技神
 楼主|

发表于 2025-11-4 09:01:10

【花雕动手做】CanMV K230 AI视觉识别模块之使用AES加密

本帖最后由 驴友花雕 于 2025-11-4 09:13 编辑

【花雕动手做】CanMV K230 AI视觉识别模块之使用AES加密
项目测试实验代码

  1. #【花雕动手做】CanMV K230 AI视觉识别模块之使用AES加密
  2. # 导入加密模块 ucryptolib
  3. # (Import the ucryptolib encryption module)
  4. import ucryptolib
  5. def test_aes():
  6.     # 打印测试 AES 加密/解密的信息
  7.     # (Print information about testing AES encryption/decryption)
  8.     print("Testing AES encryption/decryption...")
  9.     # 定义 AES-128 ECB 模式的测试
  10.     # (Define the test for AES-128 ECB mode)
  11.     key = b'1234567890abcdef'  # 16 字节的密钥
  12.     # (16-byte key)
  13.     plaintext = b'This is 16 bytes'  # 16 字节的明文
  14.     # (16-byte plaintext)
  15.     print("\nTest 1: AES-128 ECB")
  16.    
  17.     # 创建 AES-128 ECB 模式的加密实例
  18.     # (Create an AES-128 ECB mode encryption instance)
  19.     cipher = ucryptolib.aes(key, ucryptolib.MODE_ECB)
  20.     encrypted = cipher.encrypt(plaintext)
  21.    
  22.     # 创建新的 AES-128 ECB 模式的解密实例
  23.     # (Create a new AES-128 ECB mode decryption instance)
  24.     cipher = ucryptolib.aes(key, ucryptolib.MODE_ECB)
  25.     decrypted = cipher.decrypt(encrypted)
  26.    
  27.     # 断言解密后的明文与原始明文相同
  28.     # (Assert that the decrypted plaintext is the same as the original plaintext)
  29.     assert decrypted == plaintext, "AES-128 ECB failed"
  30.     print("Passed")
  31.     # 测试密钥长度不合法的情况
  32.     # (Test the case of an invalid key length)
  33.     print("\nTest 2: Invalid key length")
  34.     try:
  35.         # 尝试使用短密钥创建 AES 实例,应该引发 ValueError 异常
  36.         # (Try to create an AES instance with a short key, which should raise a ValueError)
  37.         ucryptolib.aes(b'short_key', ucryptolib.MODE_ECB)
  38.         assert False, "Invalid key not detected"
  39.     except ValueError:
  40.         print("Passed")
  41.     # 测试数据长度不对齐的情况
  42.     # (Test the case of unaligned data length)
  43.     print("\nTest 3: Unaligned data length")
  44.     cipher = ucryptolib.aes(key, ucryptolib.MODE_ECB)
  45.     try:
  46.         # 尝试加密长度不是 16 字节的数据,应该引发 ValueError 异常
  47.         # (Try to encrypt data with a length that is not 16 bytes, which should raise a ValueError)
  48.         cipher.encrypt(b'short')
  49.         assert False, "Unaligned data not detected"
  50.     except ValueError:
  51.         print("Passed")
  52.     # 打印所有 AES 测试都通过的信息
  53.     # (Print the information that all AES tests passed successfully)
  54.     print("\nAll AES tests passed successfully!")
  55. # 执行 AES 测试函数
  56. # (Execute the AES test function)
  57. test_aes()
复制代码


代码解析
这里来分析示例代码,代码使用了 MicroPython 中的 ucryptolib 模块演示 AES 加密:

1. 导入模块

  1. import ucryptolib
复制代码


这里导入了 MicroPython 中的加密库 ucryptolib,它是专为资源受限设备设计的轻量级加密库。

2. AES-128 ECB 模式测试

  1. key = b'1234567890abcdef'  # 16 字节的密钥
  2. plaintext = b'This is 16 bytes'  # 16 字节的明文
复制代码


这里定义了:
• 密钥 (key):长度为 16 字节,对应 AES-128
• 明文 (plaintext):要加密的数据,正好是 16 字节

  1. cipher = ucryptolib.aes(key, ucryptolib.MODE_ECB)
  2. encrypted = cipher.encrypt(plaintext)
复制代码


这两行代码:
1. 创建一个 AES 加密器对象,使用 ECB 模式
2. 对明文进行加密,得到密文

  1. cipher = ucryptolib.aes(key, ucryptolib.MODE_ECB)
  2. decrypted = cipher.decrypt(encrypted)
复制代码


这两行代码:
1. 创建一个新的 AES 对象(用于解密)
2. 对密文进行解密,得到解密后的数据

  1. assert decrypted == plaintext, "AES-128 ECB failed"
复制代码


这行代码验证解密后的数据与原始明文是否相同,如果不同则报错。

3. 无效密钥长度测试

  1. try:   
  2. ucryptolib.aes(b'short_key', ucryptolib.MODE_ECB)    assert False, "Invalid key not detected"except ValueError:    print("Passed")
复制代码


这段代码测试了使用不正确长度密钥的情况。AES 要求密钥长度必须是 16、24 或 32 字节,这里使用了一个较短的密钥,预期会抛出 ValueError 异常。

4. 数据长度不对齐测试

  1. cipher = ucryptolib.aes(key, ucryptolib.MODE_ECB)
  2. 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 字节的数据。

实际应用注意事项
1. 安全性:ECB模式在实际应用中不安全,建议使用CBC等更安全的模式
2. 数据填充:对于非16字节倍数的数据,需要实现填充机制(如PKCS7)
3. 密钥管理:在实际应用中需要安全的密钥存储和传输机制
这段代码主要用于验证AES加密库在CanMV K230模块上的基本功能是否正常工作。

实验串口返回情况

【花雕动手做】CanMV K230 AI视觉识别模块之使用AES加密图1

实验场景图

【花雕动手做】CanMV K230 AI视觉识别模块之使用AES加密图2


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail