您能否使用 WSS4J 库从解密算法中获得部分解密的数据?

Can you ever get partially decrypted data from a decryption algorithm using WSS4J library?

我正在使用 Java 和 Apache 最新的具有 128 位 AES 解密功能的 WSS4J 库解密一些数据。

我使用正确的填充、解密算法和密码块模式设置了看似正确的密码。

然后我在加密的数据字节上调用 doFinal() 并成功地return生成了一个值。

我的问题是它是否会 return 一个仅被部分解密的值?

例如,假设前 16 个字节在解密后仍然杂乱无章,但数据的其余部分 returned 已成功解密,并且是人类可读的预期数据。

这是否意味着我的解密过程可能存在问题?或者,如果解密设置稍微有些偏差,它甚至无法 return 来自 doFinal() 步骤的值吗?

如果我从 doFinal() 得到一个值 returned 是否意味着 100% 的数据 returned 是加密前的原始数据?

我正在解密来自 Web 服务调用的数据,而 Web 服务的所有者声称我在解密过程中一定是做错了什么,他们发送的数据是正确的。

是的,这是可能的。一个典型的例子是,如果您尝试使用错误的初始化向量 (IV) 在 CBC 模式下解密某些内容。这将导致解密的第一部分无效。

这是由于 IV 如何异或到 CBC mode 中的第一个明文块。