繁体   English   中英

使用“ AES / GCM / NoPadding”在节点中加密文件并在Java中解密。 基本上在node.js中相当于AES / GCM / NoPadding

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM