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
© Copyright 2025 ExpyDoc