JAVAで文字列を暗号化と復号化する

異なるサーバ間やメール本文からサイトへ遷移する際にメールアドレスなど個人を判別するためのパラメータをやり取りするのにそのまま文字列を記載するのではなく、暗号化するとともに受け取った方はその暗号化文を複合化して元に戻す。

JAVAには暗号・復号をするためにCipherが用意されており、これとbase64を利用して実装する。

1.文字列を暗号化する
下記にて文字列を暗号化している。
複合化する場合は変数:strResultを利用する。


//認証key
String key = "1234567890123456";
//初期化ベクトル
String vec = "abcdefghijklmnop";
//暗号化対応文字列
byte input[] = "文字列".getBytes();
// 暗号化キーと初期化ベクトルをバイト配列へ変換
byte[] byteKey = key.getBytes("UTF-8");
byte[] byteIv = vec.getBytes("UTF-8");
// 暗号化キーと初期化ベクトルのオブジェクト生成
SecretKeySpec key = new SecretKeySpec(byteKey, "AES");
IvParameterSpec iv = new IvParameterSpec(byteIv);
// Cipherオブジェクト生成
Cipher c = Cipher.getInstance("AES/CBC/PKCS5Padding");
// Cipherオブジェクトの初期化
c.init(Cipher.ENCRYPT_MODE, key, iv );
//暗号化を実施
byte encrypted[] = c.doFinal(input);
// Base64へエンコード → 別途 commons-codec が必要
String strResult = Base64.encodeBase64String(encrypted);


2.文字列を復号化する
下記にて暗号化した文字列を元に戻す。


// Base64をデコード
byte[] byteText = Base64.decodeBase64(strResult);
// Cipherオブジェクト生成
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
// Cipherオブジェクトの初期化
cipher.init(Cipher.DECRYPT_MODE, key, iv);
// 復号化の結果格納
byte[] byteResult = cipher.doFinal(byteText);
// バイト配列を文字列へ変換
strResult = new String(byteResult, "UTF-8");



keyとvecが合っていれば異なるサーバ間でも暗号・復号が可能になる。

ブログ気持玉

クリックして気持ちを伝えよう!

ログインしてクリックすれば、自分のブログへのリンクが付きます。

→ログインへ

なるほど(納得、参考になった、ヘー)
驚いた
面白い
ナイス
ガッツ(がんばれ!)
かわいい

気持玉数 : 0

この記事へのコメント

この記事へのトラックバック