0

パスワードなどの機密情報を Core Data に保存しています。アプリがバックグラウンドになるか終了するたびに、アプリが SQLite データベース全体を暗号化するようにします (サイズはそれほど大きくなく、1 MB 未満です)。私は暗号化自体を理解しましたが、ストアで Core Data スタックを正しく「閉じて」再度開くのに問題があります。

私のアプリが終了/バックグラウンドに入るとき、私は今これを行います:

  • コンテキストを保存する
  • コーディネーターからストアを削除します
  • ストアを暗号化して保存する
  • ストアを削除する

アプリが戻ってきたら、次のことを行います。

  • ストアファイルを復号化して保存する
  • ストアをコーディネーターに戻す
  • コンテキストをリセットする

ドキュメントから私が理解したことから、これで十分なはずですが、メインのView Controllerがコンテキストで再度フェッチしようとするとすぐにアプリがクラッシュします。

ストアをコアデータから一時的に削除してから再度追加する最良の方法を知っている人はいますか?

4

1 に答える 1

1

これはあなたの質問に対する答えではありませんが、言う価値があります:

あなたの暗号化戦略には致命的な欠陥があり、別のスキームを考えることを真剣にお勧めします.

ディスク上でデータを暗号化する必要があり、実際に暗号化する価値がある場合は、次の理由により、暗号化されていない状態でディスクに書き込むべきではありません。

  • アプリが強制終了したり、デバイスの電源が切られたりすると、ファイルは暗号化されずにディスク上に残ります。その後、誰かがディスクを調べて、暗号化されていないデータを見つけることができます。

  • プレーン バージョンのストア ファイルを削除しても、ファイルが安全に削除されない可能性が高いため、ディスク分析/ツールは暗号化されていないバージョンのファイルを見つける可能性があります。

ディスクに書き込むときにデータを暗号化したい場合は、暗号化されたデータを毎回ディスクに書き込む必要があります。例外はありません。「時々暗号化されます」は役に立ちません。

別の戦略として、コア データ自体に格納されているデータを暗号化することを検討することもできます。たとえば、データを NSArchive し、結果のデータ バイトを暗号化してから BLOB として保存することができます。

于 2013-02-03T20:10:58.923 に答える