javax.crypto.AEADBadTagException - AES / GCM / NoPadding работает, затем не работает - PullRequest
0 голосов
/ 22 марта 2019

Я пытаюсь расшифровать некоторые данные из БД и столкнулся с некоторыми исключениями 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.Линия из вариантов, я получил его на работу.

1 Ответ

0 голосов
/ 22 марта 2019

Хорошо, я не знал, что это будет актуально: я использую сервер Websphere Liberty Profile.Как уже упоминалось в моем редактировании, код работает в JUnit и на другом сервере.Я проверил различия и заставил их работать, поэтому я поочередно переопределил различия и обнаружил, что это было следующим:

В моих jvm.options я указал профилировщик YourKit под опцией -agentpath Byубрав эту строку из опций, я получил ее на работу.

Не уверен, что такое этикет при ответе на ваши вопросы, поэтому я тоже добавлю это к вопросу.

...