Шифр AES в режиме GCM с нулевым байтом IV в java

#java #aes-gcm

Вопрос:

Я должен зашифровать полезную нагрузку json с помощью шифра AES в режиме GCM с нулевым байтом IV.

Когда я попытался использовать секретный ключ и полезную нагрузку json, я получил другой результат, чем ожидалось. Он не соответствует только части MAC AES GCM.

Это параметры и мой исходный код:

  • GCM_TAG_LENGTH= 16,
  • Симметричный ключ В Шестнадцатеричном формате: 083080D3D0C521C02CD3AE2134363D09EA50DFF914677FAB9E22F18F9C28A3B9
  • jsonPayload:{«Параметр1″:»Значение1″,»Параметр2″:»Значение2″,»Параметр3″:»Значение3»}
  • Выход (ожидаемый): EF6BA2FFA05B6985FE129E3CB6845C4EA1E94AE98D31A538A4E24906FB720D764D640894CD9 DE7CEC00114396651A1CCAEDCF480C57A959E925C04492B9CF85FC711FAB3CBED10DC2BA99A2B B063CEFF8DE1
     Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
    SecretKeySpec keySpec = new SecretKeySpec(secretkey, "AES");
    GCMParameterSpec gcmParameterSpec = new GCMParameterSpec(Integer.valueOf(WalletStaticTypes.GCM_TAG_LENGTH.getType()) * 8,newbyte[12]);
    cipher.init(Cipher.ENCRYPT_MODE, keySpec,gcmParameterSpec);
    byte[] encryptedPayLoad = cipher.doFinal(jsonPayload.getBytes("UTF-8"));
    Hex.encodeHexString(encryptedPayLoad,false);
 

Комментарии:

1. Мы не видим ни длины тега GCM, ни ожидаемого результата (и откуда он берется?).

2. обновлена проблема с полезной нагрузкой json, секретным ключом и длиной тега

3. mode with null byte IV знаете ли вы, что повторное использование ключа и IV в режиме GCM катастрофически нарушает шифрование?