0

同様の質問を見ましたが、要件を満たしていません。

ときどき Web サービスから更新する必要があるアプリがあります。データには、url、説明、タイトルなどのフィールドが含まれます。200k から 400k エントリまで。これはローカルで使用され、このデータの検索は頻繁に実行されます (ユーザーのアクティビティによって異なります)。

ユーザーがデータにアクセスできないようにする必要があり、検索はできるだけ迅速に行う必要があります。100% 読み取り不能にする方法はないことはわかっています。すべてをリバース エンジニアリングして解読することができます (暗号化キーを電話に保管する必要があります)。私の目標は、できるだけ難しくすることです。

選択肢はほとんどありません。1. サーバーでデータを暗号化し、バイナリ ファイルとして電話に送信します。必要に応じて毎回復号化します。 2. データもファイルとして送信します。読み取り、ローカル データベースに保存 3. JSON (おそらく暗号化) として取得し、データベースまたはファイルに保存

JSON を使用すると、ローカル データとリモート データの差分の更新を簡単に実装できるという利点があります。

また、データベースについての質問があります。すべてのエントリを暗号化して保存し、何かを検索するたびに復号化する必要がありますか? 電話のパフォーマンスに影響を与える可能性があります。

もう 1 つの可能な保護層があります。それは、暗号化キーを動的にすることです。1 日 1 回サーバーからキーを取得し、保存されているデータを再暗号化すると、翌日にキーが変更されます。しかし、それはオーバーヘッドだと思います。そうでない場合は教えてください。

どのオプションを選択しますか? より良い解決策はありますか?

PS データベースは毎日更新されます。

ありがとう

4

1 に答える 1

0

データを SQLite に保存しますが、少なくとも 2 つのキーを使用して、復号化スキームをより複雑にします... 1 つは共有ライブラリに保存され、もう 1 つはサービスからダウンロードされ、そのキーでロック解除されます。

これはあなたの考えた戦略にも役立ちます.APKに付属する1つの「デバイス」キーを.SOにハードコードされたバイト[]として埋め込み、「毎日」を開くために使用される別の「毎日」キーを持つことができます' データの更新。ただし、「毎日の」キーをバイト配列形式で使用し、使用中のみメモリで復号化することを除いて、デバイスにいかなる形式でも保存しないでください。これは、そのキーをbase64でエンコードされたデバイスキーで暗号化された文字列として保存した、私が行ったことのアップグレードになります。

SQLite の操作は非常に簡単です。これはAndroid Database to Arrayで確認できます。

ここで説明していることと同様のことを行いました(ただし、毎日のキーを更新することなく)-暗号化したものを解読しません

それを見て、議論してください:)

于 2013-04-11T14:34:36.853 に答える