![](/img/trans.png)
[英]Encrypt payload using a key and iv by AES/GCM/NoPadding algorithm in node js and decrypt in java
[英]Encrypt a file in node and decrypt in java using “AES/GCM/NoPadding”. Basically AES/GCM/NoPadding equivalent in node.js
我已经使用node.js加密了文件,并在JAVA中解密了。 解密是使用“ AES / GCM / Nopadding”算法在JAVA中完成的,它是第三方应用,因此我无法更改JAVA代码。 我正在使用“ aes-256-gcm”(不确定是否等同于“ AES / GCM / Nopadding”)算法对node.js中的文件进行加密。
我尝试使用加密,节点伪造的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中实现等效
解密完成后,将此行添加到NodeJ中以获取身份验证标签。
const tag = cipher.getAuthTag();
也发送此标签。
和。 在Java部分中,请将其附加在dofinal
之前
cipher.update(textBytes);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.