Note that there are some explanatory texts on larger screens.

plurals
  1. POBadPaddingException when decrypting encrypted stream
    primarykey
    data
    text
    <p>I'm using <code>javax.crypto.Cipher</code> to encrypt a file and then decrypt it but I'm still getting the BadPaddingException. The following class receives <code>inputStream</code> from the input file and <code>outputStream</code> for the output file.</p> <p><code>Error</code></p> <pre><code>13:22:15,049 ERROR [STDERR] javax.crypto.BadPaddingException: Given final block not properly padded 13:22:15,081 ERROR [STDERR] at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..) 13:22:15,096 ERROR [STDERR] at com.sun.crypto.provider.SunJCE_f.b(DashoA13*..) 13:22:15,128 ERROR [STDERR] at com.sun.crypto.provider.AESCipher.engineDoFinal(DashoA13*..) 13:22:15,143 ERROR [STDERR] at javax.crypto.Cipher.doFinal(DashoA13*..) </code></pre> <p><code>Code</code> </p> <pre><code>public class CipherAES implements Cipher { private static final Logger logger = Logger.getLogger(CipherAES.class); private Key key; public CipherAES() { this.key = generateKey(); } private Key generateKey() { try { KeyGenerator generator; generator = KeyGenerator.getInstance("AES"); generator.init(new SecureRandom()); return generator.generateKey(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return null; } @Override public void decrypt(InputStream inputStream, OutputStream outputStream) throws IOException { try { javax.crypto.Cipher cipher = javax.crypto.Cipher.getInstance("AES"); cipher.init(javax.crypto.Cipher.DECRYPT_MODE, key); byte[] raw = IOUtil.toByteArray(inputStream); byte[] base64Decoded = Base64.decodeBase64(raw); byte[] decryptedData = cipher.doFinal(base64Decoded); outputStream.write(decryptedData); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } finally { inputStream.close(); outputStream.close(); } } @Override public void encrypt(InputStream inputStream, OutputStream outputStream) throws IOException { try { javax.crypto.Cipher cipher = javax.crypto.Cipher.getInstance("AES"); cipher.init(javax.crypto.Cipher.ENCRYPT_MODE, key); byte[] raw = IOUtil.toByteArray(inputStream); byte[] encryptedData = cipher.doFinal(raw); byte[] base64Encoded = Base64.encodeBase64(encryptedData); outputStream.write(base64Encoded); } catch (InvalidKeyException e) { e.printStackTrace(); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } catch (NoSuchPaddingException e) { e.printStackTrace(); } catch (IllegalBlockSizeException e) { e.printStackTrace(); } catch (BadPaddingException e) { e.printStackTrace(); } finally { inputStream.close(); outputStream.close(); } } } </code></pre> <p><code>LOG</code></p> <pre><code># this is log from encryption raw: [97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122] encrypted: [92, -104, -48, -10, 95, -3, -21, 46, 27, -60, -115, 85, 114, -95, -126, 108, 88, -105, 94, -84, 86, 86, -75, -83, -73, 24, -109, 86, -34, 83, -35, 106] base64Encoded: [88, 74, 106, 81, 57, 108, 47, 57, 54, 121, 52, 98, 120, 73, 49, 86, 99, 113, 71, 67, 98, 70, 105, 88, 88, 113, 120, 87, 86, 114, 87, 116, 116, 120, 105, 84, 86, 116, 53, 84, 51, 87, 111, 61] # this is from decryption raw (this is the base64Encoded): [88, 74, 106, 81, 57, 108, 47, 57, 54, 121, 52, 98, 120, 73, 49, 86, 99, 113, 71, 67, 98, 70, 105, 88, 88, 113, 120, 87, 86, 114, 87, 116, 116, 120, 105, 84, 86, 116, 53, 84, 51, 87, 111, 61] base64Decoded (this is the encrypted): [92, -104, -48, -10, 95, -3, -21, 46, 27, -60, -115, 85, 114, -95, -126, 108, 88, -105, 94, -84, 86, 86, -75, -83, -73, 24, -109, 86, -34, 83, -35, 106] decrypted (this should be the raw from the encryption): I don't know - the exception is thrown </code></pre>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload