我正在使用Java和Apache最新的带有128位AES解密的WSS4J库解密一些数据。
我使用正确的填充,解密算法和密码块模式设置了正确的密码。
然后我在加密数据字节上调用doFinal()并成功返回一个值。
我的问题是,它是否会返回仅部分解密的值?
例如,假设解密后前16个字节仍然混乱,但返回的其余数据已经成功解密,并且可以通过那里的预期数据进行人工读取。
这是否意味着我的解密过程可能存在问题?或者甚至不能从doFinal()步骤返回一个值,如果解密设置稍微有点什么东西?
如果我从doFinal()返回一个值,那意味着100%返回的数据是加密前的原始数据吗?
我正在解密来自网络服务电话的数据,网络服务的所有者声称我在解密过程中一定做错了,并且他们正在正确地发送数据。
答案 0 :(得分:1)
是的,这是可能的。一个主要的例子是,如果您尝试使用错误的初始化向量(IV)在CBC模式下解密某些内容。这将导致第一部分被解密为无效。
这是由于IV如何与CBC mode中的第一个明文块进行异或。