Necesitamos tu apoyo para difundir nuestras reseñas en referencia a las ciencias informáticas.
Solución:
Ni siquiera intente leer archivos grandes completos en la memoria. Cifre un búfer a la vez. Simplemente haga el bucle de copia estándar con una inicialización adecuada CipherOutputStream
envuelto alrededor del FileOutputStream
. Puede usar esto para todos los archivos, no es necesario crear un caso especial con él. Utilice un búfer de 8k o más.
EDITAR El ‘bucle de copia estándar’ en Java es el siguiente:
byte[] buffer = new byte[8192];
int count;
while ((count = in.read(buffer)) > 0)
out.write(buffer, 0, count);
donde en este caso out = new CipherOutputStream(new FileOutputStream(selectedFile), cipher)
.
También puede simplificar el proceso aún más usando Encryptor4j que yo soy autor: 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);
Esta biblioteca utiliza cifrado de transmisión por lo que no causará OutOfMemoryError
incluso con archivos grandes. Además, en lugar de utilizar contraseñas, puede utilizar las suyas Key
también.
Vea el ejemplo en la página de Github aquí: https://github.com/martinwithaar/Encryptor4j#file-encryption
Comentarios y calificaciones del tutorial
Si estás de acuerdo, puedes dejar un escrito acerca de qué te ha parecido esta división.