0

暗号化は初めてで、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 の初期化は... - (void)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 がオーディオ ファイルを暗号化することを意図しているのかどうかはわかりませんが、どんな助けでも大歓迎です。

4

1 に答える 1

0

クリプター呼び出しとファイルの読み取りと書き込みの両方で、エラーをチェックしていない場所がたくさんあります。各ポイントで、実際に期待どおりの結果が得られていることを確認してください。書き込まれたデータと返されたデータが適切なサイズ (元のファイルとほぼ同じ) であることを確認してください。元のファイルが実際に再生可能であることを確認してください。復号化後、開始時とまったく同じバイトであることを確認してください。

RNCryptor は、何を暗号化するかを気にしません。しかし、これを UI スレッドで実行している場合 (実行しているように見えますが、ディスクから大きなファイルを読み取ると、プログラムがハングする可能性があり、場合によっては、OS がユーザーを強制終了するのに十分な時間かかります。一般的に大きなファイル操作 (大きなオーディオ ファイルなど) は非同期で行う必要があります。

于 2016-09-10T11:18:18.453 に答える