パスワード管理アプリ「パスワードメモ」のAndroid版をリリースしました!
SNSやショッピングサイトなど、日々増えていくアカウント情報とパスワード・・・
忘れないように取り合えずメモ帳に書いておこうってしてないですか?
そんな時にこのアプリです!
・メモ帳に書くよりも簡単にログインIDとパスワードをセットでメモできる。
・検索機能を搭載しているので沢山のログイン情報を簡単に検索できる。
・たった1つのパスワードを設定するだけで書いたメモをアクセス制限。
・アプリで保存されるデータは全て暗号化されているのでもしもの時も安心。
ということで、このアプリはセキュリティにもこだわって作ってみました。
以下からはセキュリティの技術的な話。
1.最初に設定するマスターパスワードについて
SharedPreferenceを利用しています。
ここで保存されるデータについてはJavaの標準ライブラリjavax.crypto.Cipherを利用してして暗号化して保存しています。
使い方については[Java]SharedPreferencesのデータを暗号化するの記事に書きました。
2.各アカウント情報を保存するデータについて
sqliteを利用してデータベースとして保存しています。
なので、大量のデータがあっても検索機能もサクサク動きます。
データベースとして保存されるデータについても、SQLCipherライブラリを利用して、全てのデータを暗号化して保存しています。
SQLCipherライブラリの導入の方法についてはSQLChipherを導入してAndroidアプリのSQLiteデータを暗号化するの記事に記載しています。
1点注意なのが、このライブラリを利用するとandroid.database.DatabaseUtilsで提供されている一部メソッドが利用できなくなります。
自分の場合はデータベースに登録されているデータのレコード数を取得するために、DatabaseUtils.queryNumEntriesメソッドを利用していましたが、引数の型が合わなくなり、代わりに以下のメソッドを定義して代用しました。
/* ListDataOpenHelperはSQLiteOpenHelperクラスを継承したクラス */ ListDataOpenHelper helper = new ListDataOpenHelper(this); SQLiteDatabase rdb = helper.getReadableDatabase(); long recordnum = DatabaseUtils.queryNumEntries(rdb, "tablename")
↑だったものを↓に修正
/* ListDataOpenHelperはSQLiteOpenHelperクラスを継承したクラス */
ListDataOpenHelper helper = new ListDataOpenHelper(this);
SQLiteDatabase rdb = helper.getReadableDatabase("<暗号化用文字列>");
long recordnum = this.getRecordCount();
...
public long getRecordCount() {
Cursor cur = rdb.rawQuery(String.format("SELECT COUNT(*) FROM tablename"), null);
long count = 0;
if(cur.moveToNext()){
count = cur.getLong(0);
}
cur.close();
return count;
}
上記コードで同じようにテーブルに登録されているレコード数が取得できます。
次回以降も、このアプリの技術的なブログを投稿していこうと思います。



