iOS-RNCryptor带录音功能

时间:2016-09-09 20:12:04

标签: ios rncryptor

我是加密新手,正在尝试使用RNCryptor加密录制内容。文件已正确加密,但在解密后,创建的NSData会导致AVAudioPlayer初始化失败。我用于加密和解密的方法是......

        var oldCustFieldPatt = /<(nl[^ >]+)>(\s*<\/\1>)?/ig;
        content = content.replace(oldCustFieldPatt, function(a,m){
            return mergeValuesPPCI[m.toUpperCase()] || mergeValuesPPCI[m.toLowerCase()] || '';
        });

AVAudioPlayer初始化是......      - (void)initializeAudioPlayer     {

- (void)renameFileInDocumentsFolder:(NSString *)oldFilename withNewName:(NSString *)newFilename
{

 NSFileManager *filemgr;

NSString *oldPath = [self getFilePathFromDocumentsFolder:oldFilename];
filemgr = [NSFileManager defaultManager];
NSData *data = [filemgr contentsAtPath:oldPath];

 NSString *destPath = [[oldPath stringByDeletingLastPathComponent] stringByAppendingPathComponent:[newFilename stringByAppendingString:@".m4a"]];
NSLog(@"DEST:%@", destPath);

NSError *error;

NSData *encryptedData = [RNEncryptor encryptData:data
                                    withSettings:kRNCryptorAES256Settings
                                        password:@"ABC123"
                                           error:&error];



[encryptedData writeToFile:destPath atomically:YES];
[filemgr removeItemAtPath:oldPath error:&error];


}

-(NSData *)decryptFilePathFromDocumentsFolder:(NSString *)filename
{
AudioRecorderAppDelegate *appDelegate=[AudioRecorderAppDelegate sharedDelegate];
_cacheDirectory = [[[appDelegate applicationCacheDirectory]path]stringByAppendingPathComponent:@"Recordings"];
   // NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error;

NSString *filePath = [_cacheDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.m4a", filename]];
  NSData *data = [NSData dataWithContentsOfFile:filePath];

NSData *decData = [RNDecryptor decryptData:data withPassword:@"ABC123"   error:&error];



return decData;
}

我不知道我做错了什么,或者RNCryptor是否意在加密音频文件,但任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:0)

在密码调用以及文件的读写中,有很多地方不会检查错误。确保在每个点上你确实拥有你所期望的。确保写入和返回的数据大小合适(与原始文件大致相同)。确保原始文件实际上是可播放的。确保解密后,您的字节与开始时完全相同。

RNCryptor并不关心它加密的内容。但是,如果您在UI线程上执行此操作(它看起来像您正在做的那样,从磁盘读取大型文件可能会导致您的程序挂起,在某些情况下,操作系统足够长杀死你。通常大文件操作(如大型音频文件)需要异步完成。

相关问题