使用AES / ECB解密数据的大小

时间:2015-09-27 02:39:26

标签: encryption aes padding ecb

有没有办法找出AES / ECB解密二进制文件(0x00不是结束)数据的原始大小而不明确存储它?

1 个答案:

答案 0 :(得分:4)

取决于使用的填充。 mode of operation除此之外不会影响流媒体模式。像CTR这样的流媒体模式不需要任何填充方案。

paddings通过将明文填充到块大小的下一个倍数来工作。有些人会增加一个额外的块,有些则不会。块密码有两种常见的填充方案。

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

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

您可以按以下方式计算数据大小

plaintextLength = paddedLength - int(byteAtLastPosition)

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

零填充(不可靠

填充字节都是0x00字节。如果您的明文可以以0x00结尾,则在删除填充时可能会意外删除明文字节。没有办法从解密的明文中区分属于填充的0x00字节和仅属于明文的那些字节。但是,您可以发送明文的长度以及密文消息。

有些实现的不同之处在于,当明文已经是块大小的倍数时,它们是否添加了完整的填充块,在删除填充时不应该有所不同。

块密码的其他填充方案

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

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

ISO 10126填充(可靠)

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

ANSI X.923填充(可靠)

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