首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS-带录音的RNCryptor

iOS-带录音的RNCryptor
EN

Stack Overflow用户
提问于 2016-09-10 04:12:04
回答 1查看 152关注 0票数 0

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

代码语言:javascript
复制
- (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{

代码语言:javascript
复制
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是否意味着要加密音频文件,但如果有任何帮助,我将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2016-09-10 19:18:18

有很多地方你没有检查错误,无论是在密码器调用中,还是在文件的读写过程中。确保在每个点上你实际得到了你所期望的东西。确保写入和返回的数据具有合理的大小(与原始文件大致相同)。确保原始文件实际上是可播放的。确保在解密后,您具有与开始时完全相同的字节。

RNCryptor并不关心它加密的是什么。但是如果你是在UI线程上做这件事(看起来你正在做的),从磁盘读取一个大文件可能会导致你的程序挂起,在某些情况下,足够长的时间让操作系统杀死你。通常,大型文件操作(如大型音频文件)需要异步完成。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39419066

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档