1

我的任务是提高文档共享应用程序的安全性。服务器上的文件需要加密,当应用程序下载文件时,如果解密确实与例如文件下载同时发生,那将是可取的。didReceiveData. 一些客户的视频文件略低于 500 MB 的系统限制。

现在文件是用旧的ASIHTTPRequest下载的,因为它内置了对恢复下载的支持 ( setAllowResumeForFileDownloads)。

我发现了这个出色的框架RNCryptor,它支持异步解密。这是使用 pure 的示例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 指出的那样, NSMutableDataRNCryptor上的类别应该有助于内存使用。我不知道这是否是罪魁祸首。

更新 2:

我找到了罪魁祸首。我正在准备我的测试项目以使其适合其他人运行。我确实将下载网址从快速的企业服务器更改为保管箱,突然间内存使用量下降了。这意味着应用程序的下载速度比它解密数据的速度要快,从而建立了一个缓冲区。我从不认为这是一个问题。感谢@warrenm 引领潮流。

测试项目

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

解决方案

解决方案是使下载和解密 2 步过程或使用NSInputStream/做一些魔术NSOutputStream。我更喜欢后者,但我不知道该怎么做。

4

0 回答 0