我对 C++ 和 Block Cipher 加密都很陌生,我目前正在为 AES(16 字节种子/16 字节块)编写解密函数。一切进展顺利,但我的总数据大小并不总是我的块大小的倍数。我想知道在数据末尾处理剩余数据的最佳方法是什么。
我将 Crypto++ 用于 AES 库。
该ProcessBlock()
函数采用输入和输出字符数组。我假设它期望它们至少足够大作为块大小。
在分组密码中处理所有 16 字节块的最佳方法是什么,然后还处理剩余数据?
我对 C++ 和 Block Cipher 加密都很陌生,我目前正在为 AES(16 字节种子/16 字节块)编写解密函数。一切进展顺利,但我的总数据大小并不总是我的块大小的倍数。我想知道在数据末尾处理剩余数据的最佳方法是什么。
我将 Crypto++ 用于 AES 库。
该ProcessBlock()
函数采用输入和输出字符数组。我假设它期望它们至少足够大作为块大小。
在分组密码中处理所有 16 字节块的最佳方法是什么,然后还处理剩余数据?
你想要的是一个填充系统。
查看有关 Crypto++ 的 CodeProject 文章:
当消息不是密码块大小的倍数时,必须填充 ECB 或 CBC 模式消息。填充的方法和值是密码库和 API 之间互操作性问题的根源。正如 Garth Lancaster 所指出的,如果您不了解填充的细节,请使用 StreamTransformationFilter。在这种情况下,Crypto++ 过滤器将为您填充。
有一个称为“填充”的 PKCS 标准
请参阅wikipedia page,但它相当于填充以下之一:
01
02 02
03 03 03
04 04 04 04
05 05 05 05 05
这样你就知道在解密过程中原始消息在哪里结束......