俺の開発研究所

Ruby on Rails、Linux、Windowsを中心にIT技術系の備忘録とか。よく忘れるので。

*

Javaで共通鍵暗号方式「AES」を使用した暗号化と復号化

      2014/08/31

AES」とは、アメリカ合衆国の旧国家暗号規格であった「DES」が安全性の低下により、後続として公募され、採用された新暗号化規格らしい。

その「AES」は、「ブロック暗号」という共通鍵暗号方式の一種みたい。

「ブロック暗号」とは、平文をブロックという固定長の単位に分割し、暗号化していくという方式らしい。

さて、難しいことはそっと横に置いといて、「AES」をJavaで実装してみた。

スポンサード リンク

メインメソッド

まずはメインメソッド。

コマンドライン引数を暗号化メソッド、復号化メソッドに渡してやる。

また、暗号化キーと初期化ベクトルを固定値で用意した。

今回使用する「暗号利用モード(ブロック処理の種類)」は「CBC」というものを指定するのだが、これはブロックの暗号化を行う際に、前のブロックの暗号化した結果を利用し、暗号化するというもの。

一番初めのブロックに対しては、前のブロックがないので、「初期化ベクトル」という外部値を利用する。

暗号化メソッド

上記で説明した「暗号利用モード(ブロック処理の種類)」は「CBC」を指定し、「パディング方式」は「PKCS5Padding」を指定した。

「パディング方式」とは、ブロック長に満たない場合の補完の方式だ。

また、暗号化結果は、データを64種類の印字可能な英数字のみで表現する「Base64」でエンコードを行った。

なお、「Base64」クラスを使用するためにはこちらより、「Commons Codec」をダウンロードし、jarファイル「commons-codec-1.8.jar」をインポートする必要がある。

復号化メソッド

今度は復号化。

こちらは、暗号化メソッドと逆のことをする。

実行結果

「test123」という値をコマンドライン引数で渡し、暗号化・復号化をしてみた。

結果は以下のようになった。

暗号化は難しい。。

GitHub(ソースはこちらで公開中)

JavaのAESテストクラス

参考サイト

Java「AES暗号」メモ(Hishidama’s AES Sample)

AES128bit暗号化/復号化を文字列で行なってみる – bose999の試験管の中の話

 - Java , , ,