JCE
暗号化とメッセージダイジェスト
3ADM1127 倉野奈央子
準備


フォルダ名 JCE
ソースのコピー
cp ~kikn/Java/JCE/*.java .

メッセージファイル準備
Message.txtを作って、その中に
Hello Message Digest
と書き込んでおいてください。
JCEとは

Java暗号化拡張機能。

RSAでは計算式を自分で書いたけれど、今度
は用意された関数を使ってできる
Javaを使ってメッセージを暗号化したり復
号化したりしよう!
DES,AES


DESは共通鍵を使って暗号化・復号化する暗
号化アルゴリズム。
しかしDESはやぶられてしまった。そこで代わ
りに提案されたのがAES。
DES.java

(DES/ECBモードで暗号化・復号化)
6: KeyGenerator kg =
KeyGenerator.getInstance(“DES”);
生成する鍵のアルゴリズムを決定。

10: Cipher ch = Cipher.getInstance(
“DES/ECB/PKCS5Padding”)
アルゴリズム/運用モード/パディングの方
式を決定

11: ch.init(Cipher.ENCRYPT_MODE,sk);
鍵skで暗号化をするモードに初期化。
復号化モードはDECRYPT_MODE。
DES.java書き換え



このままでは何も表示されないため本当に暗号
化・復号化できているかわからない。
最後のbyte[] m2=ch.doFinal(c);の後に
String s = new String(m2); //Stringに直して
System.out.println(“m2=“+s); //表示
と入れてください。
できたら実行してみてください。
宿題1(1.の演習)
以下の暗号化アルゴリズムで実行できるか
試せ。
・AES
・RSA
・DESede
・Blowfish
・RC2
※プログラムはAESを試した場合のもの。
プログラムの下にそれぞれの結果をコメントアウト
してYes,Noで答える。
DESKey.java




(鍵を指定する)
8~10:鍵の設定。
13~15:鍵を生成。
17,18行目:もう鍵を作ってあるのでいらない。コメ
ントアウトしてください。
20,26,30:メッセージ・暗号文・復号文を出力して
いる。
bytestr(byte b[])は後ろに関数が作ってある。
byte配列の中身をそのまま見れるようStringに
直す関数。
演習2ヒント(nextIntメソッド)



ランダム関数を使うので、最初に
import java.util.Random; を忘れない。
Random rnd = new Random();
rnd.nextInt(int x);
0~xまで(xは含まない)のint型の乱数を
返してくれる。
ストリーム








FileInputStream fi = ~~
FileOutputStream fo = ~~
CipherInputStream ci = ~~
CipherOutputStream co = ~~
fi.read(m):ファイルから読んでmに入れる。
fo.write(m,s,b):ファイルにmのsからbバイト書き
込む。
ci.read(m):ファイルから読んで暗号化または復
号化してmに入れる。
co.write(m,s,b):ファイルにmのsからbバイトを暗
号化または復号化して書き込む。
MD5とは


MD5は認証やデジタル署名などに使われるハッ
シュ関数の一つ。
ハッシュ関数とは

原文を元に固定長の「ハッシュ値」を計算し、通信経
路の両端で比較して、改ざんをふせいだり、通信中に
何かの原因でデータが変わってしまったのに気付くこ
とができる。
OK!
MD5.java(ハッシュ値計算)



7: MessageDigest md =
MessageDigest.getInstance(“MD5”);
アルゴリズムをMD5に指定。
9: md.update(m);
mをいくつにも区切りながらハッシュにか
ける。
10: byte h[] = md.digest();
最後にパディングなどを適用してハッシュ
値の計算が終了。それをhに入れる。
演習4ヒント(ストリーム部分)


読み込むデータはテキストデータだけでなく、
.gif、.jpeg、.wavのようなバイナリデータで、ファ
イルの大きさが大きい場合も考慮して
InputStream is = new
FileInputStream(argv[0]);
BufferedInputStream bis = new
BufferedInputStream(is);
としてファイルを一気に読み込む。
あとは演習3を参考にしてみよう。
宿題

1.DES暗号化の演習


宿題8.1


いろいろなアルゴリズムを試す演習をする。
ソース名AES.java
ソース名DEStime.java
オリジナル問題

MD5で、元のファイルのハッシュ値と、暗号化・復号
化後のファイルのハッシュ値を比較(両方を表示)する
プログラムを作成する。
ソース名Compare.java
ダウンロード

Document