我是加密新手,正在尝试使用RNCryptor加密录制内容。这些文件已正确加密,但在解密后,创建的NSData会导致AVAudioPlayer初始化失败。我用来加密和解密的方法是...
- (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;
}AVAudioPlayer初始化是...-(空)initializeAudioPlayer{
NSData *recording = [self decryptFilePathFromDocumentsFolder:_fileNameTextField.text];
if(!audioPlayer)
{
NSError *error=nil;
audioPlayer = [[AVAudioPlayer alloc]
initWithData:recording fileTypeHint:@".m4a" error:&error];
if (error)
NSLog(@"Error: %@", [error localizedDescription]);
else我不知道我做错了什么,也不知道RNCryptor是否意味着要加密音频文件,但如果有任何帮助,我将不胜感激。
发布于 2016-09-10 19:18:18
有很多地方你没有检查错误,无论是在密码器调用中,还是在文件的读写过程中。确保在每个点上你实际得到了你所期望的东西。确保写入和返回的数据具有合理的大小(与原始文件大致相同)。确保原始文件实际上是可播放的。确保在解密后,您具有与开始时完全相同的字节。
RNCryptor并不关心它加密的是什么。但是如果你是在UI线程上做这件事(看起来你正在做的),从磁盘读取一个大文件可能会导致你的程序挂起,在某些情况下,足够长的时间让操作系统杀死你。通常,大型文件操作(如大型音频文件)需要异步完成。
https://stackoverflow.com/questions/39419066
复制相似问题