有没有办法在没有显式存储的情况下找出AES / ECB解密的二进制数据的原始大小(0x00不是结尾)?
这取决于所使用的填充。该运作模式对其他没有影响比它不能是流模式。像CTR这样的流媒体模式不需要任何填充方案。
的填补处理通过填充明文到块大小的下一个倍数工作。有些添加了额外的块,有些则没有。分组密码有两种常见的填充方案。
用表示填充字节数的字节填充明文。即使必须添加完整的填充块,也始终应用填充。由于填充的大小是在填充本身中编码的,因此可以轻松可靠地将其删除。
您可以通过以下方式计算数据的大小
plaintextLength = paddedLength - int(byteAtLastPosition)
您可能还需要检查其他int(byteAtLastPosition)-1
填充字节是否包含byteAtLastPosition
。
填充字节均为0x00字节。如果您的纯文本可以以0x00结尾,那么您将有在删除填充时意外删除纯文本字节的风险。无法从解密的明文中区分出属于填充的0x00字节和仅属于明文的0x00字节。但是,您可以发送明文的长度以及密文消息。
有些实现在明文已经是块大小的倍数时是否添加完整的填充块有所不同,这在删除填充时不会有所不同。
填充的工作原理是先添加1位,再添加0位,以填充块大小的倍数。如果处理字节,则看起来像是0x80字节,后跟0x00字节。由于明确定义了填充的开始,因此可以可靠地将其删除。
这与PKCS#7填充非常相似,区别在于随机选择第一个到第二个到最后一个填充字节。仅最后一个填充字节对填充字节的数量进行编码。
这与PKCS#7填充非常相似,区别在于第一个到第二个到最后一个填充字节为0x00字节,最后一个填充字节编码填充字节的数量。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句