#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 катастрофически нарушает шифрование?