Я зашифровал файл с помощью node.js и расшифровал в JAVA. Расшифровка выполняется в JAVA с использованием алгоритма «AES / GCM / Nopadding», и это стороннее приложение, поэтому я не могу изменить код JAVA.
Я шифрую файл в файле node.js с использованием алгоритма «aes-256-gcm» (не уверен, эквивалентен ли он «AES / GCM / Nopadding»).
Я пробовал с помощью crypto, модуль npm для кузницы узла также пытался установить cipher.setAutoPadding (false). Но не повезло.
Не могли бы вы направить меня, где я иду не так.
код в node.js
const
algorithm = 'aes-256-gcm',
randomKey = crypto.randomBytes( 32 ),
randomIv = crypto.randomBytes( 16 );
const
cipher = crypto.createCipheriv( algorithm, randomKey, randomIv ),
input = fs.createReadStream( './imageTest.jpg.gz' ), //gzip image
output = fs.createWriteStream( './imageTest.jpg.gz.enc' );
input.pipe( cipher ).pipe( output );
код для расшифровки в JAVA
byte[] decrypt(byte[] encrptedData, byte[] key, byte[] iv) {
GCMParameterSpec ivSpec = new GCMParameterSpec(128, iv);
Cipher cipher = Cipher.getInstance("AES/GCM/NoPadding");
cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key, "AES"), ivSpec);
return cipher.doFinal(encryptedData);
}
При расшифровке файла я получаю следующую ошибку на cipher.doFinal(encryptedData)
шаг
Caused by: javax.crypto.AEADBadTagException: Tag mismatch!
at com.sun.crypto.provider.GaloisCounterMode.decryptFinal(GaloisCounterMode.java:571)
at com.sun.crypto.provider.CipherCore.finalNoPadding(CipherCore.java:1046)
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:983)
at com.sun.crypto.provider.CipherCore.doFinal(CipherCore.java:845)
at com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:446)
at javax.crypto.Cipher.doFinal(Cipher.java:2165)
поэтому мне нужно знать, как получить эквивалент в node.js