Как зашифровать PDF-файл на Python и расшифровать его на Java, используя режим AES-GCM?JAVA

Программисты JAVA общаются здесь
Anonymous
Как зашифровать PDF-файл на Python и расшифровать его на Java, используя режим AES-GCM?

Сообщение Anonymous »

Моя проблема в том, что я не могу правильно расшифровать PDF-файл в Java в режиме aes gcm. Несмотря на использование правильного ключа и IV, я все равно получаю ошибку при расшифровке.
Код шифрования Python —
def encrypt(in_file, out_file, password, key_length=32):

bs = AES.block_size

cipher = AES.new(password, AES.MODE_GCM, password )

finished = False
while not finished:
chunk = in_file.read(1024 * bs)
if len(chunk) == 0 or len(chunk) % bs != 0:
padding_length = (bs - len(chunk) % bs) or bs
# changed right side to str.encode(...)
chunk += str.encode(
padding_length * chr(padding_length))
finished = True
out_file.write(cipher.encrypt(chunk))


Код расшифровки Java-
public static void decryptWithEcb(String filenameEnc, String filenameDec, byte[] key) throws Exception
{

try (FileInputStream in = new FileInputStream(filenameEnc);
FileOutputStream out = new FileOutputStream(filenameDec)) {
byte[] ibuf = new byte[1024];
int len;
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");
GCMParameterSpec gcmParameterSpec = new GCMParameterSpec(128, key);
cipher.init(Cipher.DECRYPT_MODE, secretKeySpec ,gcmParameterSpec);
while ((len = in.read(ibuf)) != -1) {
byte[] obuf = cipher.update(ibuf, 0, len);
if (obuf != null)
out.write(obuf);
}
byte[] obuf = cipher.doFinal();
if (obuf != null)
out.write(obuf);

}

}
}

Ошибка в java-
javax.crypto.AEADBadTagException: Tag mismatch!
at com.sun.crypto.provider.GaloisCounterMode.decryptFinal(GaloisCounterMode.java:620)
at com.sun.crypto.provider.CipherCore.finalNoPadding(CipherCore.java:1116)
at com.sun.crypto.provider.CipherCore.fillOutputBuffer(CipherCore.java:1053)
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:853)
at com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:446)
at javax.crypto.Cipher.doFinal(Cipher.java:2051)
at Encrypt.decryptWithEcb(Encrypt.java:72)
at Encrypt.main(Encrypt.java:15)

Вернуться в «JAVA»