2009年7月28日火曜日

AdobeAIRでsqlliteを暗号化

AdobeAIR1.5から、組み込みのsqldbにて暗号化した情報を格納できるようになったらしいので試してみた。
暗号化の部分を管理してくれるのは EncryptedLocalStoreというクラス。
AIR は、Windows® では DPAPI、Mac® OS® では KeyChain、Linux® では KeyRing または KWallet を使用して、暗号化されたローカル ストアを各アプリケーションおよびユーザーに関連付けます。暗号化されたローカルストアでは、128 ビットの AES-CBC 暗号化を使用します。

とのこと。OSの管理機能を使っているんですね。
確かに、アプリの中にKEYを持っていたら、アプリを解析されたらおしまいですしね。

パスワードの保存は、以下の感じ。

/*Passwordの保存 */
private function passwordSave(passwordString:String):void {
var bytes:ByteArray = new ByteArray();
bytes.writeUTFBytes(passwordString);
EncryptedLocalStore.setItem('password', bytes);
}

/* Passwordのload */
private function passwordLoad():ByteArray {
var storedValue:ByteArray = EncryptedLocalStore.getItem('password');
return storedValue;
}


sqldbで使う時には、connection openのタイミングで、password(ByteArray)を渡してあげればOK!

sqlConn.open(file, SQLMode.CREATE, false, 1024, password);

んが! パスワードは 16byte でないといけないらしい。
んー、ユーザにパスワードを任意に入れてもらうようなアプリを作りたい時は、"16byteの文字を入れてくれ!"と言わなければいけないのか?? よくわからんなぁー。

まぁーとりあえず自分用のパスワード管理アプリでも作ってみようかしら...
パスワード管理系の情報が、保存方法に結構迷うんですよねー。

ネット上のサービスはなんかためらっちゃぅけど、とはいえローカルマシンだけに置いておくのもそれはそれで不安だしー。マルチOSで使いたいしー。ソフトに依存してたら、なんかバグった時に復旧できないとツライ...けど、TEXTでバックアップ取っておくのはなんか違うしー。
• • •