Androidで共通鍵暗号化でつまづいたので記録に残す
Androidで文字列をセキュアに保存したい場合、
暗号化してsqliteに保存するのがよろしいと思われる。
ここではAndroid自体のセキュリティがアレだとか、Rooted端末とapktoolがあればアレをこうしてアレ出来るだとかいう話はとりあえず置いとく。
まず以下のようなソースを書いた。
内容は、
共通鍵の秘密鍵を生成している箇所のみ抽出。 DBに鍵が保存されていない初回はif文を迂回して生成ロジックで生成後DBに保存。 DB保存後はDBから復元する。 private final static String ARGOLISM = "PBEWithSHA1And256BitAES-CBC-BC"; private SecretKey getSecretKey() throws NoSuchAlgorithmException, InvalidKeySpecException, NameNotFoundException { // check saved secret key is exist. byte[] savedSecretKey = DBHelper.readByteData(context, "hoge"); if(savedSecretKey != null && savedSecretKey.length > 0){ return new SecretKeySpec(savedSecretKey, ARGOLISM); } // generate new secret key. char[] pw = generatePassword(); int iteratorCount = 1024; int keySize = 256; int saltLength = 8; byte[] salt = "00000000".