【问题标题】:Can AES128 CBC uses 0-padding?AES128 CBC 可以使用 0 填充吗?
【发布时间】:2018-04-01 04:24:55
【问题描述】:
由于客户端的某些限制,他们在将纯文本传递给 AES alogirhtm 之前使用 0x00 填充纯文本,而不是普通的 PKCS5/PKCS7 或类似填充。
虽然它在我的服务器端是可行的,但我有一个问题是使用 0-padding 是否有效。举个例子,纯文本正好以 0 填充字符结尾。服务器端是无法区分的。
0-padding 是可接受的填充方法之一吗?如果是,我方应如何正确处理填充?
提前致谢。
【问题讨论】:
标签:
encryption
aes
padding
【解决方案1】:
不确定“ASCII 代码 0”是什么意思,我会假设一个值为 0x00 的字节? (是的,十六进制仍然是一回事)请参阅Zero padding:如果原始文件以一个或多个零字节结尾,则零填充可能不可逆,从而无法区分明文数据字节和填充字节。
Null 填充 (0x00) 可以用于不以 null 结尾的数据,ASCII 文本就是一个有效的示例。已弃用的 PHP mcrypt 会执行此操作,并且空填充会产生互操作性问题。
所以:是的,空填充确实适用于某些数据,例如文本,但不适用于二进制数据。最好不要使用,PKCS#7.PKCS#5 padding 是一种更好更常用的padding。