2016-09-09 9 views
0

暗号化が新しく、RNCryptorで録音を暗号化しようとしています。ファイルは適切に暗号化されますが、復号化後、作成されたNSDataによってAVAudioPlayerの初期化が失敗します。 (空)initializeAudioPlayer {iOS-RNCryptor録音あり

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 

私は何を知っていない - 私は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; 
} 
をしている使用している方法私は間違っているか、またはRNCryptorがオーディオファイルを暗号化することさえ意図されていても、どんな助けでも大歓迎です。

+0

いくつかのテストを実行して、 'decryptFilePathFromDocumentsFolder'から返された' NSData'が元のデータと一致するかどうかを確認しましたか? – rmaddy

+0

あなたのオーディオプレーヤーを確認する必要がありますか?暗号化/復号化を行わないとコードは機能しますか? – rmaddy

+0

はい、暗号化を解除した後のNSDataは暗号化前のものと一致し、オーディオプレーヤーは暗号化なしでうまく動作しますので、何がうまくいかないのですか? –

答えて

0

cryptorの呼び出しとファイルの読み書きの両方で、エラーをチェックしていない場所がたくさんあります。それぞれのポイントで、実際に期待していることを確認してください。書かれたデータと返されたデータが合理的なサイズ(元のファイルとほぼ同じ)であることを確認してください。元のファイルが実際に再生可能であることを確認してください。解読後に、あなたが始まったのとまったく同じバイトを持っていることを確認します。

RNCryptorは何を暗号化しても気にしません。しかし、UIスレッドでこれをやっているのであれば、ディスクから大きなファイルを読み込むと、プログラムがハングすることがあります。場合によっては、OSがあなたを殺すのに十分な長さです。

+1

私は暗号化の前と復号化の後でバイトをチェックし、それらはすべて一致します。私の問題は私がcreatだということですファイルパスからNSDataを作成してフォルダに保存します。私は暗号化せずにそれをやってみたが、私は同じエラーが発生するので、それは録音の処理と関係がある。 –

+0

私は、ファイル名ではなくオーディオレコーディングの内容を暗号化する必要があると仮定しますが、それを行うと、AVAudioPlayerでサポートされていないファイルタイプのエラーが発生します。復号化されたデータを再生可能なオーディオファイルパスに変換する方法はありますか? –

+0

暗号化されていないバイトと暗号化されたバイトを比較したところ、暗号化されていないことに気付きました。私はついにそれを理解しました。 –