暗号化の部分を管理してくれるのは 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でバックアップ取っておくのはなんか違うしー。