cryptolib --- 加密算法

cryptolib 模块提供对称加密原语。在 OpenMV Cam 上,只要启用了 ssl 模块,就会包含该模块。

class cryptolib.aes(key: bytes | bytearray | memoryview, mode: int, IV: bytes | bytearray | memoryview | None = None)

创建一个新的 AES 加密对象,适用于加密或解密。初始化之后,该加密对象只能用于一个方向——在 encrypt() 之后运行 decrypt()(或反之)是不受支持的。

参数:

  • key —— 加密/解密密钥。必须恰好为 16 字节(AES-128)或 32 字节(AES-256);不支持 AES-192。可接受任何遵循缓冲区协议的对象。

  • mode —— 选择分组加密模式:

    名称

    说明

    1

    ECB

    电子密码本(Electronic Code Book)。每个 16 字节的分组独立加密;相同的明文分组会产生相同的密文。通常不推荐用于新的设计。

    2

    CBC

    密码分组链接(Cipher Block Chaining)。每个分组在加密前与前一个密文分组进行异或运算。需要一个 16 字节的 IV

    ECB 和 CBC 都要求输入长度为 16 字节 AES 分组大小的整数倍。

  • IV —— 用于 CBC 模式的 16 字节初始化向量。在 ECB 模式下被忽略。

encrypt(in_buf: bytes | bytearray | memoryview, out_buf: bytearray | memoryview | None = None) bytes

加密 in_buf。缓冲区长度必须是 16 字节的整数倍;请在调用前自行对明文进行填充。

如果省略 out_buf,结果将作为一个新分配的 bytes 对象返回。否则,密文将被写入可变缓冲区 out_buf,其长度至少应与 in_buf 相同。in_bufout_buf 可以引用同一个缓冲区以进行原地加密。

decrypt(in_buf: bytes | bytearray | memoryview, out_buf: bytearray | memoryview | None = None) bytes

encrypt() 类似,但执行相反的操作。