Androidで文字列をAES暗号化、復号する

Androidで文字列の暗号化、復号するサンプルを作りました。
コードはこちら。 GitHub - itog/CryptoSample: encrypt and decrypt text on Android

使い方

上のテキストボックスにテキストを入力して、真ん中左のencryptボタンを押すと暗号化された文章が下のテキストボックスに表示されます。
反対に真ん中右側のボタンを押すと文章が復号され、上のテキストボックスに表示されます。もし暗号化されてBase64エンコードされたデータがあるなら直接下のテキストボックスに入力してもOKです。

サンプルの解説

使い方

encrypt, decryptともスタティックメソッドなので、シードと暗号化・復号したいテキストを渡すだけです。

Crypto.encrypt(CRYPT_SEED, plainText);
Crypto.decrypt(CRYPT_SEED, encryptedText);

ちなみにサンプルでは"hoge"なんてSEEDを使っていますが、実際に使う場合はハードコーディングではなくて、簡単には読み取れないような処理をした値を使いましょう。

暗号化処理

暗号化の処理を実際にやっているのは以下のメソッドです。AESで暗号化しています。

	private static byte[] encrypt(byte[] raw, byte[] plain) throws Exception {
		SecretKeySpec keySpec = new SecretKeySpec(raw, "AES");
		Cipher cipher = Cipher.getInstance("AES");
		cipher.init(Cipher.ENCRYPT_MODE, keySpec);
		byte[] encrypted = cipher.doFinal(plain);
		return encrypted;
	}
暗号化データをテキストで見えるようにする

暗号化されたデータはバイナリデータなので、テキストとして表すことができません。これを英数字だけで表すBase64エンコードすることで、今回のサンプルのように暗号化済みのデータをテキストとして扱うことができます。

	Base64.encodeToString(encrypted, Base64.DEFAULT);
復号

復号の処理は暗号化と逆、Base64デコードして、decryptしています。手順を逆にしただけなのでコードは省略します。

以上です。