IOS - 如果文件太大而无法将所有文件加载到内存中,我如何AES解密大文件?

Kyl*_*yle 16 iphone encryption cryptography ios

我知道AES如何加密和解密NSData,但这需要先将整个文件加载到内存中.

假设我有一个50mb的加密文件data.dat.enc,如何将其解密为文件data.dat而无需先将其全部加载到内存中?

Rob*_*ier 15

编辑:此代码已由http://github.com/rnapier/RNCryptor扩展.


RNCryptManager是如何执行此操作的一个很好的示例.它来自iOS5的第11章示例代码:PTL.看着:

+ (BOOL)decryptFromStream:(NSInputStream *)fromStream
                 toStream:(NSOutputStream *)toStream
                 password:(NSString *)password
                    error:(NSError **)error;
Run Code Online (Sandbox Code Playgroud)

它假设盐和IV已经被添加到流中(这在书中都有解释).有关AES加密的更一般性讨论,请参阅使用CommonCrypto使用AES正确加密.

有关其用法的示例,请参阅同一项目中的CPCryptController.m.

如果有足够的兴趣,我可以将这个对象拉出来并支持它作为一个独立的项目,而不仅仅是一段示例代码.它似乎对人们有用.但按原样集成并不困难.

更一般的答案是您创建一个加密器,CCCryptorCreate然后CCCryptorUpdate对每个块进行调用.然后你打电话CCCryptorFinal来完成任务.