|
AES-CTR(计数器模式) 工作原理 CTR 模式的核心思路是: 1. 把计数器(Counter)不断递增:0, 1, 2, 3... 2. 每个计数值与密钥一起做 AES 加密 → 得到一串密钥流 3. 用这串密钥流与明文做异或 → 得到密文 加解密完全一样: 加密:密文 = 明文 ⊕ 密钥流 解密:明文 = 密文 ⊕ 密钥流 因为是异或,所以同一个函数既能加密也能解密。 每次循环: 1. 拿当前的 `Ai`(含 nonce + 计数值)做 AES 加密 → 产出 16 字节密钥流 `Si` 2. 密钥流与 16 字节明文异或 → 得到 16 字节密文 3. 计数器 `counter++`,准备下一块 需要注意的地方 - **密钥流不能重复使用**——同一把密钥下如果计数器值重复,两段密钥流就一样了,两个密文异或会暴露明文信息 - **可以随机解密任意位置**——要解密第 N 块,直接用 `初始值 + N` 算密钥流就行,不用从头算起 函数声明: uint32_t hal_aes_ccm_encrypt(uint8_t* key, uint8_t* nonce, uint8_t* din, uint32_t dLen, uint8_t* dout) | 参数 | 说明 | |------|------| | `key` | **密钥**,16 字节(AES-128) | | `nonce` | **随机数**,13 字节。用于让每次加密的密钥流不同,防止重复 | | `din` | **输入数据**,要加密的明文,或要解密的密文 | | `dLen` | **数据长度**(字节),可以是任意长度,不需要 16 字节对齐 | | `dout` | **输出缓冲区**,存放加密/解密后的结果,长度至少为 `dLen` | **返回值**:返回 `dLen`(输入数据的长度)。 **注意**:`key` 和 `nonce` 在内部都是按大端序处理的 有6621E和6626的代码,硬件方面会稍微不一样
|
6621E_6626_aes_ccm-202606103175.zip

