事象の水平線

個人的ブックマーク代わりなメモ書きブログ。 地球は丸いよ。↓このへん。

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

PageTop
ちょっとした暗号化に
Javaで共通鍵暗号方式「AES」を使用した暗号化と復号化
を参考にstaticなutilメソッドを書いていたのですが、APIをアップデートしたあたりから、
cipher.init(Cipher.ENCRYPT_MODE, key, iv);

Potentially insecure random numbers on Android 4.3 and older. Read https://android-developers.blogspot.com/2013/08/some-securerandom-thoughts.html for more info.
とか言われるようになって、????だったので、
AndroidのCipher.java問題 - maru source
開発メモ: Android4.3 で暗号化処理が変わる・・・?
なこともあって、彷徨っていたら
Androidの暗号化ライブラリConcealを使ってみる - Qiita
という記事を見つけたので使ってみた。

build.gradle とか 何のことやらさっぱりわからんのですが、AndroidStudioとかですかね。
BUCK てのはどうやらFaceBookがオープンソース化したビルドツールらしいです。全く知らない世界です。
てなわけで、
Conceal: Documentation
からjarファイル2個と.soファイルを3個頂いて適宜eclipseに入れてこんなコードを書いてみました。

public static String encrypt(Context context, String name, String plainText) {
String strResult = "";
Crypto crypto = new Crypto(new SharedPrefsBackedKeyChain(context), new SystemNativeCryptoLibrary());
if (crypto.isAvailable()) {
try {
// UTF8でbyte[]に変換して、暗号化する
byte[] cipherText = crypto.encrypt(plainText.getBytes("utf-8"), new Entity(name));
// Base64へエンコード
strResult = Base64.encodeToString(cipherText, Base64.DEFAULT);
} catch (Exception e) {
e.printStackTrace();
}
}
return strResult;
}
public static String decrypt(Context context, String name, String plainText){
String strResult = "";
Crypto crypto = new Crypto(new SharedPrefsBackedKeyChain(context), new SystemNativeCryptoLibrary());
if (crypto.isAvailable()) {
try {
byte[] byteText = Base64.decode(plainText, Base64.DEFAULT);
// 暗号化されたbyte[]を復号化して、UTF8で文字列に戻す
byte[] decrypted = crypto.decrypt(byteText, new Entity(name));
strResult = new String(decrypted, "utf-8");
} catch (Exception e) {
e.printStackTrace();
}
}
return strResult;
}


単に短い文字列(パスワードみたいなもん。今回の用途は違うけど)を暗号化したかったので文字列を入れたら暗号化された文字列を返して(encrypt)、暗号化された文字列を入れたら元の文字列を返す(decrypt)ようにしました。
nameってのは、わかってませんが必要みたいです。keyみたいなもんですかね。
plainTextが暗号化したい文字列 or 暗号化された文字列 です。

まぁ、これで暗号化した文字列をSharedPreferencesとかでファイルに書き出しておくんで、それを覗かれる程度じゃOKなんですけど、nameをベタ書きしとくと微妙なので
Androidで安全にパスワードを保存する(4) | TechRacho
なんかを参考にいろいろと小細工してみました。まぁ、その辺はConcealとは無関係にやってたことですけど。




concealの前に国産のcamelliaてのを試したのですが、
camellia-android -Android JNI wrapper for Camellia encryption library & AES eccryption library - Google Project Hosting
データの暗号化、camellia-androidを試す - Android Advent
camellia-androidはApache License 2.0のようでいいんですけど、本体のcamelliaのライセンスがどうにもよくわからない(マルチプルライセンスとか仰る)のでやめました。

concealはBSD Licenseとハッキリあるので、安心して組み込めそうです。
スポンサーサイト

PageTop

コメント

 ※
 ※
管理者にだけ表示を許可する
  ※ 必須項目です

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。