1

我正在尝试使用 openssl AES 加密我的数据我在此链接中找到了一个非常好的示例。http://saju.net.in/code/misc/openssl_aes.c.txt 但我仍然可以找到答案的问题尽管它执行多个 key size ,但它填充数据。例如,它需要 16 字节作为输入来加密或 16 的任何倍数我给了 1024 包括 null 。它仍然给我一个大小为 1040 的输出,但据我所知,AES 输入大小 = 输出大小,如果输入是 128 位/16 字节的倍数。任何人在我之前尝试过这个例子或者可以给我任何想法?提前致谢 。

4

1 回答 1

4

大多数填充方案要求始终添加一些最小量的填充。这是(至少主要是)这样在接收端,您可以查看最后一个字节(或最后的一些少量数据)并知道最后有多少数据是填充的,有多少是真实的数据。

例如,典型的填充方案在数据之后放置零字节,最后一个字节包含填充的字节数。例如,如果您添加了 4 个字节的填充,则填充字节(十六进制)将类似于00 00 00 04. 另一种常见的可能性是将相同的值放在所有填充字节中,所以它看起来像04 04 04 04.

在接收端,算法必须准备好剥离填充字节。为此,它查看最后一个字节,告诉它要从末尾删除多少字节的数据并忽略。如果不存在填充,它将包含一些值(无论消息中的最后一个字节碰巧是什么)。由于它无法知道没有添加填充,因此它会查看该值,并删除那么多字节的数据——仅在这种情况下,它会删除实际数据而不是填充。

虽然可以设计一种填充方案,当输入恰好是块大小的整数倍时避免添加额外数据,但只需为每条消息添加至少一个字节的填充就简单多了,所以接收者可以依靠总是读取最后一个字节并找出它接收到的有多少是填充的。

于 2012-11-03T22:21:04.127 回答