Note that there are some explanatory texts on larger screens.

plurals
  1. POCipherInputStream only read 16 bytes (AES/Java)
    primarykey
    data
    text
    <p>I'm using CipherInputStream and CipherOutputStream to encrypt files using AES.</p> <p><code>encrypt(...)</code> seems to be working fine, but my <code>decrypt(...)</code> function only decrypt the first 16 bytes of my files.</p> <p>Here is my class :</p> <pre><code>public class AESFiles { private byte[] getKeyBytes(final byte[] key) throws Exception { byte[] keyBytes = new byte[16]; System.arraycopy(key, 0, keyBytes, 0, Math.min(key.length, keyBytes.length)); return keyBytes; } public Cipher getCipherEncrypt(final byte[] key) throws Exception { byte[] keyBytes = getKeyBytes(key); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, "AES"); IvParameterSpec ivParameterSpec = new IvParameterSpec(keyBytes); cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec, ivParameterSpec); return cipher; } public Cipher getCipherDecrypt(byte[] key) throws Exception { byte[] keyBytes = getKeyBytes(key); Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, "AES"); IvParameterSpec ivParameterSpec = new IvParameterSpec(keyBytes); cipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec); return cipher; } public void encrypt(File inputFile, File outputFile, byte[] key) throws Exception { Cipher cipher = getCipherEncrypt(key); FileOutputStream fos = null; CipherOutputStream cos = null; FileInputStream fis = null; try { fis = new FileInputStream(inputFile); fos = new FileOutputStream(outputFile); cos = new CipherOutputStream(fos, cipher); byte[] data = new byte[1024]; int read = fis.read(data); while (read != -1) { cos.write(data, 0, read); read = fis.read(data); System.out.println(new String(data, "UTF-8").trim()); } cos.flush(); } finally { fos.close(); cos.close(); fis.close(); } } public void decrypt(File inputFile, File outputFile, byte[] key) throws Exception { Cipher cipher = getCipherDecrypt(key); FileOutputStream fos = null; CipherInputStream cis = null; FileInputStream fis = null; try { fis = new FileInputStream(inputFile); cis = new CipherInputStream(fis, cipher); fos = new FileOutputStream(outputFile); byte[] data = new byte[1024]; int read = cis.read(data); while (read != -1) { fos.write(data, 0, read); read = cis.read(data); System.out.println(new String(data, "UTF-8").trim()); } } finally { fos.close(); cis.close(); fis.close(); } } public static void main(String args[]) throws Exception { byte[] key = "mykey".getBytes("UTF-8"); new AESFiles().encrypt(new File("C:\\Tests\\secure.txt"), new File("C:\\Tests\\secure.txt.aes"), key); new AESFiles().decrypt(new File("C:\\Tests\\secure.txt.aes"), new File("C:\\Tests\\secure.txt.1"), key); } } </code></pre> <p>So my question is, why the <code>decrypt</code> function only read the first 16 bytes ?</p>
    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.
 

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