Tenemos una aplicación de envío (node.js) que envía a una aplicación Java algunas cadenas XML encriptadas simétricas con una clave AES 128.
Cuando la aplicación Java intente descifrar el contenido con la clave proporcionada, se generará el siguiente error:
javax.crypto.BadPaddingException: el bloque final dado no se rellenó correctamente. Tales problemas pueden surgir si se usa una clave incorrecta durante el descifrado. en com.sun.crypto.provider.CipherCore.unpad(CipherCore.java:975) en com.sun.crypto.provider.CipherCore.fillOutputBuffer(CipherCore.java:1056) en com.sun.crypto.provider.CipherCore.doFinal (CipherCore.java:853) en com.sun.crypto.provider.AESCipher.engineDoFinal(AESCipher.java:446) en javax.crypto.Cipher.doFinal(Cipher.java:2168)
public generateKey(): Buffer { return crypto.generateKeySync('aes', { length: 128 }).export(); } // Encrypt content with key public encryptSymmetric(content: string, encryptionKey: Buffer): Buffer { const iv = Buffer.from(crypto.randomBytes(this.IV_LENGTH)).toString('hex').slice(0, this.IV_LENGTH); const cipher = crypto.createCipheriv('aes-128-cbc', encryptionKey, iv); let encrypted = cipher.update(content); encrypted = Buffer.concat([encrypted, cipher.final()]); return encrypted; //return iv + ':' + encrypted.toString('hex'); }Receptor Java: descifrar con clave
private static byte[] decryptContent(SecretKeySpec key, byte[] content) throws GeneralSecurityException { Cipher cipher = Cipher.getInstance('AES'); cipher.init(Cipher.DECRYPT_MODE, key); return cipher.doFinal(content); // EXCEPTION }No tengo idea de cómo resolver este problema específico, a nivel de encriptación hay muchas opciones diferentes como AES CBC o GCM. Espero que puedas ayudarme. ¡Solo podemos cambiar el código del remitente!