Encrypting a large file with AES using JAVA

后端 未结 2 806
萌比男神i
萌比男神i 2020-12-10 16:20

I\'ve tested my code with files less than this(10mb, 100mb, 500mb) and the encryption works. However, I run in to problems with files greater than 1gb. I\'ve generated a lar

相关标签:
2条回答
  • 2020-12-10 16:41

    Don't even try to read entire large files into memory. Encrypt a buffer at a time. Just do the standard copy loop with a suitably initialized CipherOutputStream wrapped around the FileOutputStream. You can use this for all files, no need to make a special case out of it. Use a buffer of 8k or more.

    EDIT The 'standard copy loop' in Java is as follows:

    byte[] buffer = new byte[8192];
    int count;
    while ((count = in.read(buffer)) > 0)
    {
        out.write(buffer, 0, count);
    }
    

    where in this case out = new CipherOutputStream(new FileOutputStream(selectedFile), cipher).

    0 讨论(0)
  • 2020-12-10 16:46

    You can also simplify the process even further using Encryptor4j that I have authored: https://github.com/martinwithaar/Encryptor4j

    File srcFile = new File("original.zip");
    File destFile = new File("original.zip.encrypted");
    String password = "mysupersecretpassword";
    FileEncryptor fe = new FileEncryptor(password);
    fe.encrypt(srcFile, destFile);
    

    This library uses streaming encryption so it will not cause OutOfMemoryError even with large files. Also, instead of using passwords you can use your own Key as well.

    Check out the example on the Github page here: https://github.com/martinwithaar/Encryptor4j#file-encryption

    0 讨论(0)
提交回复
热议问题