AES / ECB解密数据的大小

安德烈

有没有办法在没有显式存储的情况下找出AES / ECB解密的二进制数据的原始大小(0x00不是结尾)?

Artjom B.

这取决于所使用的填充。运作模式对其他没有影响比它不能是流模式。像CTR这样的流媒体模式不需要任何填充方案。

填补处理通过填充明文到块大小的下一个倍数工作。有些添加了额外的块,有些则没有。分组密码有两种常见的填充方案。

PKCS#5 / PKCS#7填充(可靠)

用表示填充字节数的字节填充明文。即使必须添加完整的填充块,也始终应用填充。由于填充的大小是在填充本身中编码的,因此可以轻松可靠地将其删除。

您可以通过以下方式计算数据的大小

plaintextLength = paddedLength - int(byteAtLastPosition)

您可能还需要检查其他int(byteAtLastPosition)-1填充字节是否包含byteAtLastPosition

零填充(不可靠

填充字节均为0x00字节。如果您的纯文本可以以0x00结尾,那么您将有在删除填充时意外删除纯文本字节的风险。无法从解密的明文中区分出属于填充的0x00字节和仅属于明文的0x00字节。但是,您可以发送明文的长度以及密文消息。

有些实现在明文已经是块大小的倍数时是否添加完整的填充块有所不同,这在删除填充时不会有所不同。

分组密码的其他填充方案

位填充或ISO / IEC 9797-1填充方法2(可靠)

填充的工作原理是先添加1位,再添加0位,以填充块大小的倍数。如果处理字节,则看起来像是0x80字节,后跟0x00字节。由于明确定义了填充的开始,因此可以可靠地将其删除。

ISO 10126填充(可靠)

这与PKCS#7填充非常相似,区别在于随机选择第一个到第二个到最后一个填充字节。仅最后一个填充字节对填充字节的数量进行编码。

ANSI X.923填充(可靠)

这与PKCS#7填充非常相似,区别在于第一个到第二个到最后一个填充字节为0x00字节,最后一个填充字节编码填充字节的数量。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

AES解密后的数据大小

来自分类Dev

AES-128-ECB解密:输入数据不是完整的块

来自分类Dev

CryptoJS AES 256 ECB解密

来自分类Dev

我正在使用 AES ECB 256 填充 - 加密发送数据,但我无法实现解密

来自分类Dev

用Java加密/解密“ AES / ECB / PKCS5Padding”

来自分类Dev

用Java加密/解密“ AES / ECB / PKCS5Padding”

来自分类Dev

密钥大小非法-AES CBC解密

来自分类Dev

AES ECB加密组

来自分类Dev

AES ECB iOS加密

来自分类Dev

在Android上解密“ SunJCE” AES加密数据

来自分类Dev

使用AES的SQLite数据库解密

来自分类Dev

AES解密输入数据不是完整的块

来自分类Dev

使用 Powershell 从 PyCrypto 解密 AES CBC 数据

来自分类Dev

AES 128解密失败

来自分类Dev

AES加密和解密

来自分类Dev

Python AES解密

来自分类Dev

加密和解密AES

来自分类Dev

Delphi Aes解密功能

来自分类Dev

基本AES解密问题

来自分类Dev

AES(rijndael)解密

来自分类Dev

AES加密硬件解密

来自分类Dev

AES / CFB解密

来自分类Dev

Android AES 解密

来自分类Dev

在C#中解密使用PCKS5填充的AES / ECB时遇到问题

来自分类Dev

WinRT中的AES ECB解密,可从.NET Desktop转换代码

来自分类Dev

在某些情况下,使用AES ECB模式'BadPaddingException'进行加密和解密

来自分类Dev

使用node.js从使用php / mcrypt创建的AES-ECB密文中解密

来自分类Dev

AES加密256 ECB模式

来自分类Dev

AES加密的数据库条目大小