如何使用密码(AES)为iOS和Android压缩文件?

是否有能够使用AES加密来压缩文件的库?

iOS上find了这个: https : //github.com/gianlucabertani/Objective-Zip

更新:

更新参数中的密码设置和zipfile创建方法。

您可以使用Zip4j库http://www.lingala.net/zip4j/download.php

如果你想要AES加密,你也可以使用以下代码

// 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()将types设置为所需的加密。 和setAesKeyStrength()设置加密算法的强度。

对于Android,有一个很好的博客文章解压缩文件: http : //blog.alutam.com/2009/10/31/reading-password-protected-zip-files-in-java/这是使用7-实现zip标准(实际上是较旧forms的pkware zip而非AES),因此您可以解压缩从其他平台创建的文件

但是,我更喜欢使用它: zip4j ,因为它已经有了java库,你可以简单地将它们集成到你的Android项目中,因为集成它JAVA库很容易,你得到一个真正的快速修复。 此外,由于这支持AES,因此它与您的问题更相关

编辑:我的一个朋友正在使用Minizip for iOS为他的iOS项目实现压缩/解压缩。 你可以试试

仅供参考:当我们使用密码时,我们无法让zip4j和Minizip相互操作(在Andropid中压缩存档,在iOS中解压缩,反之亦然)(我们在阅读您的post后尝试过,所以我们花了很少的时间直到现在)。 如果您尝试这些并在这方面取得进展,请发布在这里

您可以使用OpenSSL for android https://github.com/eighthave/openssl-android需要一些知道在NDK中用于编译库来渲染它(.so),使用本机库如open ssl来赢得一些额外的性能是非常有利的

尝试使用libzip库。 它是一个C库,并且有Android NDK包 ,因此您可以在iOS和Android上重复使用它