我知道如何加密和解密一个NSData
,但这需要先将整个文件加载到内存中。
假设我有一个名为data.dat.enc
的50mb加密文件,我如何才能将其解密为data.dat
文件,而不必首先将其全部加载到内存中?
发布于 2012-03-16 05:45:33
编辑:此代码已由http://github.com/rnapier/RNCryptor扩展。
RNCryptManager就是一个很好的例子。它来自iOS5:PTL的第11章示例代码。请看:
+ (BOOL)decryptFromStream:(NSInputStream *)fromStream
toStream:(NSOutputStream *)toStream
password:(NSString *)password
error:(NSError **)error;
它假设盐和IV已经被放在流的前面(这在书中都有解释)。有关AES加密的更多一般性讨论,请参阅Properly encrypting with AES with CommonCrypto。
有关其用法的示例,请参阅同一项目中的CPCryptController.m。
如果有足够的兴趣,我可以把这个对象拉出来,并将其作为一个独立的项目来支持,而不仅仅是一段示例代码。这对人们来说似乎是相当有用的。但是按原样集成并不是那么困难。
更一般的答案是使用CCCryptorCreate
创建一个加密程序,然后为每个块调用CCCryptorUpdate
。然后调用CCCryptorFinal
来完成任务。
https://stackoverflow.com/questions/9724851
复制相似问题