我是加密新手,正在尝试使用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是否意在加密音频文件,但任何帮助都会非常感激。
答案 0 :(得分:0)
在密码调用以及文件的读写中,有很多地方不会检查错误。确保在每个点上你确实拥有你所期望的。确保写入和返回的数据大小合适(与原始文件大致相同)。确保原始文件实际上是可播放的。确保解密后,您的字节与开始时完全相同。
RNCryptor并不关心它加密的内容。但是,如果您在UI线程上执行此操作(它看起来像您正在做的那样,从磁盘读取大型文件可能会导致您的程序挂起,在某些情况下,操作系统足够长杀死你。通常大文件操作(如大型音频文件)需要异步完成。