I encrypt a text in Java and want to decrypt in Javascript and vice versa, my Java code looks like this
Cipher c = Cipher.getInstance("AES/GCM/NoPadding"); SecretKeySpec k = new SecretKeySpec(this.key.getBytes(), "AES"); c.init(Cipher.ENCRYPT_MODE, k); byte[] encryptedData = c.doFinal(this.value.getBytes()); byte[] iv = c.getIV(); sb.append(new String(Base64.getEncoder().encode(iv))); sb.append(';'); sb.append(new String(Base64.getEncoder().encode(encryptedData))); // send sb.toString() to the other end I tried node-forge and elliptic for decryption in Nodejs, in node-forge I have an error complaining about tag which I don't have, can someone provide a solution in Nodejs.
Javascript Code
function convertFromMxBase64(FormatEncryptedString) { const speratorIndex = FormatEncryptedString.indexOf(';'); const encryptedBase64 = mxFormatEncryptedString.substr(speratorIndex + 1); const ivBase64 = mxFormatEncryptedString.substr(0, speratorIndex); return { iv: forge.util.createBuffer(forge.util.decode64(ivBase64), 'utf8'), payload: forge.util.createBuffer(forge.util.decode64(encryptedBase64), 'utf8') }; } function decrypt() { let { iv, payload } = convertFromMxBase64(mxCombi); const key = forge.util.createBuffer(theKey, 'utf8'); var cipher = forge.cipher.createDecipher("AES-GCM", key); // forge.rc2.createDecryptionCipher(key); cipher.start({ iv }); cipher.update(payload); cipher.finish(); var encrypted = cipher.output; // outputs encrypted hex console.log(encrypted.toHex()); }