読者です 読者をやめる 読者になる 読者になる

WonderPlanet DEVELOPER BLOG

ワンダープラネットの開発者ブログです。モバイルゲーム開発情報を発信。

SQLiteDatabaseを暗号化をしてみる

Android Android SQLite

今回エンジニアブログを担当する戸田です。

今回は、Androidのデータ永続化で利用される、SQLiteDatabaseの暗号化・復号化するライブラリ「SQLCipher for Android」について紹介します。

導入方法

Androidアプリケーションで「SQLiteCipher for Android」を使用するには、以下のURLからダウンロードが出来ます。

SQLCipherhttp://sqlcipher.net/

そして、ダウンロードしたZipファイルを解凍して、libsフォルダ内のファイルとassetsフォルダ内のファイルをAndroidプロジェクトのlibsフォルダとassetsフォルダにコピーをします。

暗号化済みのDatabaseを使用

SQLiteを操作するクラス関係が「net.sqlcipher.database」パッケージで提供がされていて、「android.database.sqlite」パッケージの各種クラスとほぼ同じになっています。

まず、SQLiteOpenHelerクラスを使用して、暗号化されたDatabaseを作成します。

import net.sqlcipher.database.SQLiteDatabase;  
import net.sqlcipher.database.SQLiteOpenHelper;  
import android.content.Context;  
import android.provider.BaseColumns;  
  
public class SampleSQLHelper extends SQLiteOpenHelper {  
  
    public SampleSQLHelper(Context context) {  
        super(context, new File(context.getExternalFilesDir(null), "SampleDB.db").getAbsolutePath(), null, 1);  
    }  
  
    @Override  
    public void onCreate(SQLiteDatabase db) {  
        String sql = "create table sample ( id integer primary key autoincrement, name text not null);";  
        db.execSQL(sql);  
    }  
  
    @Override  
    public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {  
  
    }  
  
}  

次に、暗号化対象のDatabaseからPasswordを設定し、SQLiteDatabaseを取り出してデータ追加します。

SampleSQLHelper sqlHelper = new SampleOpenHelper(this);  
String mPassword = "w12345678";  
  
SQLiteDatabase db = sqlHelper.getWritableDatabase(mPassword);  
  
// Passwordを指定してSQLiteDatabaseを取り出した後の使用方法  
// は同じで、データを追加します。  

その後、暗号化対象のDatabaseファイルをダンプしてみると内容は暗号化されているのが分かると思います。

また、サンプルコードではPasswordをソースコード上に直接記述してますが、実際に利用する場合は解析されないように工夫が必要になります。