fc2ブログ
ホーム   »  Java  »  JCE で簡単暗号化

JCE で簡単暗号化

JDK 1.4 から Java Cryptography Extension (JCE) がコアライブラリに追加されている。これにより Java で DES や AES を使った共有鍵 (秘密鍵) 方式の暗号・復号が気軽に扱えるようになった。

// 暗号化するテキストをバイナリ化
String clearText = "This is secret text.";
byte[] binary = clearText.getBytes("UTF-8");

// 暗号化のキー
byte[] key = ("password").getBytes("UTF-8");

// 暗号化の実行
SecretKeySpec k = new SecretKeySpec(key, "DES");
Cipher c = Cipher.getInstance("DES");
c.init(Cipher.ENCRYPT_MODE, k);
byte[] encrypted = c.doFinal(binary);
 

キー (バイナリ) から SecretKeySpec を作成し、Cipher で暗号化を行う。キーは復号化するときにも使うので、乱数とか日付とか不確定なものは NG。また、使用できるキーのビット長はアルゴリズムに依存してるので注意。

上記のサンプルコードから元のバイナリに戻すには以下の通り。Cipher#init() に指定するモードが異なるだけである。

// 暗号化で使用したキー
byte[] key = ("password").getBytes("UTF-8");

// 復号化の実行
SecretKeySpec k = new SecretKeySpec(key, "DES");
Cipher c = Cipher.getInstance("DES");
c.init(Cipher.DECRYPT_MODE, k);
byte[] binary = c.doFinal(encrypted);

// 元の文字列を復元
String clearText = new String(binary, "UTF-8");

暗号化・復号化ともにバイナリからバイナリへの変換となる。文字列を暗号化する場合は、いったん getBytes() でバイナリ化してやる必要があるのだが、実行環境の文字エンコーディングの影響を受けないように "UTF-8" 固定にしておくのが無難。

より強固な暗号を使いたい場合は上記サンプルを元にアルゴリズムを変更してキーのビット幅増やせば良い。

コメント
トラックバック
トラックバック URL
コメントの投稿
管理者にだけ表示を許可する
Profile
Takami Torao
Takami Torao
C/C++ 使いだった 1996年、運命の Java と出会い現在に至る。のらアーキテクト。
Yah, this is image so I don't wanna eat spam, sorry!
Search

Google
MOYO Laboratory
Web

カテゴリー
最近の記事
最近のコメント
最近のトラックバック
月別アーカイブ
ブロとも申請フォーム
RSSフィード
リンク