2

DB のエクスポート/インポート機能を追加したアプリがあります...次の 2 つのことを行いたいと考えています。

1) エクスポート時: エクスポートされたデータベースをスクランブルして、通常の人 (最高のカモフラージュ技術を解読できる人もいることを知っています) が内容を読み取れないようにします...

2) インポート時: インポートするファイルを検証して、それが自分のアプリで動作するものであり、それ以外のものではないことを確認します。

ここで最初のポイントに対処できる暗号化に関するリンクをいくつか見ました。しかし、暗号化はしたくありません。簡単なスクランブルをしたい。また、アプリケーションが検索するテーブルをチェックして、テーブルの内容を確認することに関する投稿もいくつか見ました。これは良い解決策ですが、最初にファイルをロードして、エラーがあるかどうかを確認してロールバックする必要があります。

どんな助けでも大歓迎です...

4

3 に答える 3

1

非常に簡単な方法: ファイルにヘッダーを追加して、後で読み込んで確認できるようにします。

// w/o exception handling finally etc
String secret = "zomg,secret";
byte[] header = secret.getBytes();
byte[] buffer = new byte[4096];
FileInputStream in = new FileInputStream("/your/sqlite.db");
FileOutputStream out = new FileOutputStream("/sdcard/the.secretfile");
out.write(header);
int read = 0;
while ((read = in.read(buffer)) != -1) {
    out.write(buffer, 0, read);
}
out.close();
in.close();
于 2012-03-18T01:23:15.150 に答える
0

そこで、最終的に、cipherinputstreamを使用してDES暗号化を行うことにしました。整合性を検証するためにヘッダーを追加する代わりに、インポートするファイルにすべてのテーブル名が存在するかどうかを確認しています。sqliteDBファイルにクリアテキストのddlステートメントがあることがわかりました。これはおそらく最もエレガントで完全なソリューションではありませんが、機能します。

于 2012-03-19T14:34:56.250 に答える
0

これに対処する最も簡単な方法は、データベース ファイルのチェックサム (MD5) を生成し、計算ごとに比較することです。詳細については

于 2012-03-18T01:32:30.937 に答える