iOS:下载大文件并在例如解密。 didReceiveData

时间:2013-01-02 14:03:29

标签: ios encryption asihttprequest afnetworking

我的任务是提高文档共享应用的安全性。服务器上的文件需要加密,当应用程序下载文件时,如果解密确实与例如文件下载同时发生,则是理想的。 didReceiveData。有些客户的视频文件系统限制在500 MB以下。

由于内置支持恢复下载(setAllowResumeForFileDownloads),现在使用旧ASIHTTPRequest下载文件。

我发现这个精彩的框架RNCryptor支持异步解密。以下是使用纯NSURLConnection的示例:

- (void)connection:(NSURLConnection *)connection didReceiveResponse (NSURLResponse*)response {
    self.decryptor = [[RNOpenSSLDecryptor alloc] initWithSettings:kRNCryptorAES256Settings password:password handler:^(RNCryptor *cryptor, NSData *data) {
        [self writeData:data];

        if (cryptor.isFinished){
            [self finishAndPlayVideo];
        }
    }];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
    [self.decryptor addData:data];
}

问题是RNCryptorNSMutableData *inData它附加了所有数据,但这会带来巨大的内存问题。数据需要像RNOpenSSLCryptor.m的旧版本1.1中那样流式传输。

有没有人有解决方案来操纵RNCryptorASIHTTPRequest(或AFNetworking)代码来同时下载和解密大文件?

更新1:

正如@warrenm指出NSMutableData上的RNCryptor类别应该有助于内存使用。我无法弄清楚这是否是罪魁祸首。

更新2:

我找到了罪魁祸首。我正在准备我的测试项目,让其他人可以运行。我确实将下载URL从快速服务器更改为Dropbox,突然之间内存使用率下降了。这意味着应用程序的下载速度比解密数据的速度快,从而构建缓冲区。我从不认为这是一个问题。感谢@warrenm领导。

测试项目

https://dl.dropbox.com/u/195602/stackoverflow/OnlineDecryptTest.zip 切换kUseFastServer中的常量kUseEncryptionViewController.m以查看不同的内存使用情况。

解决方案

解决方案是使用NSInputStream / NSOutputStream进行下载和解密两步流程或做一些魔术。我会推荐后者,但我无法弄清楚如何做到这一点。

0 个答案:

没有答案