【发布时间】:2021-06-08 17:05:10
【问题描述】:
我有一些可以使用AES/CBC/NoPadding 或AES/CBC/PKCS5Padding 加密的数据。
我想解密该数据。因此需要决定使用哪种算法进行解密。根据数据,是否可以确定加密的数据是否被填充? 还是有其他解决方案?
【问题讨论】:
-
不,至少先验明文的长度是不可能的。
-
使用 NoPadding 解密。然后查看解密文本的结尾。如果有填充,那就是它出现的地方。您可以检查它以确定在加密方面使用了哪种填充。如果它最初是用 NoPadding 加密的,那么解密后的文本将正常结束,并且最后添加的填充中没有奇怪的字符。
-
@rossum:没有办法区分填充的纯文本和恰好具有相同字符的未填充的纯文本,除非“没有奇怪的字符”是指 ASCII 文本。
-
如果 NoPadding 解密后的文本以 0x03 0x03 0x03 结尾,那么很可能是 3 个字节的 PKCS7 填充。如果它以 0x00 0x00 0x00 0x00 ... 结尾,那么它很可能是 PaddingZeros。你不能绝对肯定,但你可以做出有根据的猜测。
标签: encryption cryptography cypher aes