Я пытаюсь расшифровать некоторые данные из БД и столкнулся с некоторыми исключениями AEADBadTagException, но не всегда.
При поиске ошибки я взял инициализацию шифра и поставил цикл дешифрования.Т.е.
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)
О да, я использую Java 1.8 на "IBM J9 VM", если это помогает.
У кого-нибудь естьИдея, что может побудить это поведение?С уважением
Редактировать: в дополнительных новостях это, кажется, вызвано чем-то на сервере, на котором он работает - я могу успешно расшифровать те же данные на другом сервере и в тесте JUnit.Я посмотрю, смогу ли я найти разницу в конфигурациях.
Решение В моих jvm.options я указал профилировщик YourKit в опции -agentpath.Линия из вариантов, я получил его на работу.