¿Cómo archivar un file con contraseña (AES) para iOS y Android?

¿Hay una biblioteca capaz de comprimir files con contraseña usando el encryption AES?

Encontré esto para iOS: https://github.com/gianlucabertani/Objective-Zip

ACTUALIZAR:

configuration de contraseña actualizada en parameters y método de creación de files zip.

Puede usar la biblioteca Zip4j http://www.lingala.net/zip4j/download.php

si quieres AES Encryption también puedes hacer con el siguiente código

// Initiate ZipFile object with the path/name of the zip file. ZipFile zipFile = new ZipFile("c:\\ZipTest\\AddFilesWithAESZipEncryption.zip"); // Build the list of files to be added in the array list // Objects of type File have to be added to the ArrayList ArrayList filesToAdd = new ArrayList(); filesToAdd.add(new File("c:\\ZipTest\\sample.txt")); filesToAdd.add(new File("c:\\ZipTest\\myvideo.avi")); filesToAdd.add(new File("c:\\ZipTest\\mysong.mp3")); // Initiate Zip Parameters which define various properties ZipParameters parameters = new ZipParameters(); parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE); // set compression method to deflate compression //DEFLATE_LEVEL_FASTEST - Lowest compression level but higher speed of compression //DEFLATE_LEVEL_FAST - Low compression level but higher speed of compression //DEFLATE_LEVEL_NORMAL - Optimal balance between compression level/speed //DEFLATE_LEVEL_MAXIMUM - High compression level with a compromise of speed //DEFLATE_LEVEL_ULTRA - Highest compression level but low speed parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL); //Set the encryption flag to true parameters.setEncryptFiles(true); //Set the encryption method to AES Zip Encryption parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_AES); //AES_STRENGTH_128 - For both encryption and decryption //AES_STRENGTH_192 - For decryption only //AES_STRENGTH_256 - For both encryption and decryption //Key strength 192 cannot be used for encryption. But if a zip file already has a //file encrypted with key strength of 192, then Zip4j can decrypt this file parameters.setAesKeyStrength(Zip4jConstants.AES_STRENGTH_256); //set password parameters.setPassword("your password here"); // Now add files to the zip file // Note: To add a single file, the method addFile can be used // Note: If the zip file already exists and if this zip file is a split file // then this method throws an exception as Zip Format Specification does not // allow updating split zip files zipFile.addFiles(filesToAdd, parameters); 

setEncryptionMethod () establece los types de encriptación que desea. y setAesKeyStrength () establece la fuerza del algorithm de encriptación.

Para Android, hay una buena publicación de blog para descomprimir files aquí: http://blog.alutam.com/2009/10/31/reading-password-protected-zip-files-in-java/ Esto se implementa usando 7- zip (en realidad, una forma más antigua de zip de pkware y no AES), por lo que también puedes descomprimir files creados desde otras plataforms

Sin embargo, prefiero usar esto: zip4j , porque ya tiene java libs y simplemente puedes integrarlos en tu proyecto Android y, desde que lo integras, JAVA libs es bastante fácil, obtienes una solución rápida real. Además, dado que esto es compatible con AES, es más relevante para su pregunta.

Editar: Un amigo mío está usando Minizip para iOS para implementar el zip / unzipping para su proyecto iOS. Puedes probar eso

Para su información: no podemos hacer que zip4j y Minizip interactúen entre sí cuando usamos passwords (zip un file en Andropid, y descomprimirlo en iOS, y viceversa) (lo intentamos después de leer su publicación, por lo que hemos pasado poco time hasta ahora). Publique aquí si testing estos y avanza en esta dirección.

Puede usar OpenSSL para Android https://github.com/eighthave/openssl-android, es necesario que algunos conozcan en NDK para comstackr la biblioteca para hacerlo (.so), es muy perfermant utilizar una biblioteca nativa como open ssl para ganar algo de perfermancia

Intenta utilizar la biblioteca libzip . Es una biblioteca C y hay un package de Android NDK , por lo que puedes volver a utilizarlo en iOS y Android