Androidアプリで画像データを暗号化したいケースがあって調査しました。
試した方法は以下2つです。
1.画像データを自前の暗号化メソッドで暗号化し、それをSQLiteに登録する。
javax.crypto.Cipherクラスを利用した暗号化メソッドを自作してみました。
が、1画像につき、暗号化->SQLite登録の処理に約4秒程度掛かってしまいました。
時間が掛かりすぎると言うことで、別の方法を考えました。
2.SQLCipherを利用し、SQLiteファイル自体を暗号化する。SQLCipherというオープンソースを利用する方法。
こちらだとレスポンスが圧倒的に速かったです。
で、実際の使い方ですが、以下のような手順となります。
公式サイトからSQLCipher for Androidをダウンロードします。
2.ダウンロードしたzipファイルを任意の場所に展開。3.Androidプロジェクトに必要なフォルダをコピーします。
libsフォルダをコピー。
ターゲットがAndroid2.2以下の場合は、assetsフォルダもコピー。
4-1.importの変更
通常、SQLiteを利用する際に利用するandroid.database.sqlite.SQLiteDatabaseではなく、
net.sqlcipher.database.SQLiteDatabaseを利用する様にimportを変更。
SQLiteDatabase.loadLibs(context);
4-3.SQLiteにアクセスする際に暗号化用Keyを引数に渡す。SQLiteDatabase.openOrCreateDatabase(file, "hoge", null);
※この場合、"hoge"が暗号化用Keyとなります。
等…
4-4.後のSQLiteへのアクセス方法は、通常のSQLiteへのアクセスと同じとなります。実際に上記手順で作成したDBファイルを確認したところ、以下の様な結果となります。
非暗号化DBファイルをLitaで開いた結果
暗号化DBファイルをLitaで開いた結果
実際に利用する際には公式サイトのライセンス関係を要確認という事で。