javax.crypto.AEADBadTagException-AES / GCM / NoPadding可以正常工作,然后不起作用

时间:2019-03-22 14:58:44

标签: java exception cryptography aes

我正在尝试解密数据库中的某些数据,并且遇到了一些AEADBadTagExceptions,但并非总是如此。

在寻找错误的同时,我进行了密码初始化,并围绕解密进行了循环。即

GCMParameterSpec parameterSpec = new GCMParameterSpec(authenticationTagLength, ivByte);
cipher = Cipher.getInstance(AES_MODE_GCM);
cipher.init(Cipher.DECRYPT_MODE, secretKey, parameterSpec);
if (additionalDataText.length()>0) {
    cipher.updateAAD(additionalDataText.getBytes("UTF-8"));
    }                        }
for(int i = 0; i < 500; i++) {
    cipher.doFinal(cypherBytes);
}

多次运行此代码,第一次尝试获得17/500成功,接下来的几次尝试获得零。更改代码并让Eclipse重建可能会产生17或18次成功,然后失败。

例外情况如下

[err] javax.crypto.AEADBadTagException
[err]   at com.ibm.crypto.provider.GCTRInHardware.gcm_ad(Unknown Source)
[err]   at com.ibm.crypto.provider.aA.c(Unknown Source)
[err]   at com.ibm.crypto.provider.AESGCMCipher.engineDoFinal(Unknown Source)
[err]   at com.ibm.crypto.provider.AESGCMCipher.engineDoFinal(Unknown Source)
[err]   at javax.crypto.Cipher.doFinal(Unknown Source)

哦,是的,如果有帮助,我正在“ IBM J9 VM”上使用Java 1.8。

有人知道什么可能促使这种行为吗? 问候

编辑:在其他消息中,这似乎是由运行该服务器的服务器上的某些东西引起的-我可以在JUnit测试中成功解密另一台服务器上的相同数据。我看一下是否可以找到配置上的差异。

解决方案,在我的jvm.options中,我在选项-agentpath下指定了YourKit分析器。通过从选项中删除此行,我可以使它工作。

1 个答案:

答案 0 :(得分:0)

好的,我不知道这是否有意义:我正在运行Websphere Liberty Profile服务器。正如我的编辑中提到的那样,代码可在JUnit和其他服务器上工作。我已经检查了差异并使其起作用,因此我一个接一个地重新修改了差异,并发现以下内容:

在我的jvm.options中,我在选项下指定了YourKit分析器     -agentpath 通过从选项中删除此行,我可以使用它。

不确定回答您自己的问题的礼节是什么,所以我也将其添加到问题中。