39

データを暗号化する必要がある iPhone アプリケーションを作成しています。NSFileProtectionComplete 属性を設定して、ファイルの暗号化を有効にする方法を学びました。また、iPhone のバージョンをチェックして、iOS 4.0 以降が実行されていることを確認する方法も知っています。

ただし、ユーザーがパスコードを選択しておらず、[設定] > [一般] > [パスケード ロック] 画面でデータ保護を具体的に有効にしていない場合、データは実際にはまったく保護されていないことに気付きました。

警告をポップアップ表示して、パスコードを有効にしてデータ保護をオンにする必要があることをユーザーに伝え (4 より前の iPhone ではバックアップと復元が必要です)、パスコードがない場合はアプリケーションを終了したいと思います。およびデータ保護が有効になっています。とにかく、これらの設定の状態を調べることはできません。データ保護が無効になっている場合、UIApplication の「protectedDataAvailable」など、私が見つけたすべての API はすべて成功します。

4

6 に答える 6

18

免責事項:この回答はiOS 4.3.3まで有効でした

データ保護がオンになっている場合、新しく作成されたファイルにはnil NSFileProtectionKeyデフォルトで .

データ保護がオフになっている場合、新しく作成されたファイルにはNSFileProtectionNone NSFileProtectionKeyデフォルトで .

したがって、次のコードでファイル保護の存在を検出できます。

NSString *tmpDirectoryPath = 
    [NSHomeDirectory() stringByAppendingPathComponent:@"tmp"];
NSString *testFilePath = 
    [tmpDirectoryPath stringByAppendingPathComponent:@"testFile"];
[@"" writeToFile:testFilePath 
      atomically:YES
        encoding:NSUTF8StringEncoding
           error:NULL]; // obviously, do better error handling
NSDictionary *testFileAttributes = 
    [[NSFileManager defaultManager] attributesOfItemAtPath:testFile1Path
                                                     error:NULL];
BOOL fileProtectionEnabled = 
    [NSFileProtectionNone isEqualToString:[testFile1Attributes objectForKey:NSFileProtectionKey]];
于 2011-05-31T19:28:05.150 に答える
3

Apple は、ユーザーがパスコードを設定しているかどうかを判断する方法を提供していません。

アプリで暗号化が必要な場合は、信頼できる暗号化の実装を使用してファイルを暗号化および復号化し、ユーザーにパスコードの入力を求めるか、キーをキーチェーンに保存することを検討する必要があります。

于 2012-07-17T00:54:23.717 に答える