Encryption 加密不是块大小偶数倍的数据时,我是否必须发送完整的最后一个块?

Encryption 加密不是块大小偶数倍的数据时,我是否必须发送完整的最后一个块?,encryption,aes,Encryption,Aes,如果我使用的是块密码,如AES,其块大小为128位,如果我的数据不是128位的偶数倍,我该怎么办?我正在处理数据包,不想在加密数据包时更改数据包的大小,但我的数据不是128的偶数倍 AES分组密码是否允许在加密后在不改变我的邮件大小的情况下处理短的最后一个块?算法本身要求每个块为128位,但实际上它取决于特定的实现。但是,如果这是一项要求,并且实现不自动支持,那么是什么阻止您使用零填充数据以使其成为128的倍数呢?使用分组密码,您需要指定由于这一事实而发送的消息的长度,然后用随机数据填充最后一个

如果我使用的是块密码,如AES,其块大小为128位,如果我的数据不是128位的偶数倍,我该怎么办?我正在处理数据包,不想在加密数据包时更改数据包的大小,但我的数据不是128的偶数倍


AES分组密码是否允许在加密后在不改变我的邮件大小的情况下处理短的最后一个块?

算法本身要求每个块为128位,但实际上它取决于特定的实现。但是,如果这是一项要求,并且实现不自动支持,那么是什么阻止您使用零填充数据以使其成为128的倍数呢?

使用分组密码,您需要指定由于这一事实而发送的消息的长度,然后用随机数据填充最后一个块中未使用的部分。您可能应该使用一个。更不用说HMAC或某种完整性系统,这取决于您使用AES的目的


AES只是说明如何将16字节的数据加密到一个块中,而不是其他任何内容。

这实际上是一个实现细节。虽然算法需要一个完整的块,但您的实现可能会用零或随机数据填充最后的块。

这种细节取决于您使用的链接模式。链接模式定义了调用AES原语的次数。对于给定的输入消息。最简单的链接模式包括简单地将输入数据分割成连续的16字节块,并对每个块分别加密;这被称为ECB(作为“电子代码簿”),它有弱点(即,如果两个输入块相同,这在“现实生活”数据中很常见,那么两个相应的输出块也将相等,任何人都可以看到)

某些链接模式会放大数据,即加密消息将略大于输入消息。其他链接模式(如CTR)不适用。几乎所有的安全链接模式都需要处理“初始值”,这是一段数据(通常与块大小相同),不需要保密,但发送方和接收方都必须知道,并且每个消息都必须是不同的。一些模式(如CBC)需要均匀随机IV,而其他一些模式则需要一个简单的计数器。通常会将IV与加密消息一起发送。您还可以使用散列函数从密钥本身派生IV

这些事情很棘手,很难知道你是否做对了:安全性无法测试;弱密码系统的编译和运行与任何其他应用程序一样。不建议设计您自己的加密协议。完全使用健壮的原语并不能保证结果是安全的