こんなソースを書いた。
いや、書いたというのはおこがましい。
こちらの記事のソースファイルをまるまるコピーして一部書き換えただけだ。
http://www.trustss.co.jp/Java/JEncrypt122.html
追加したのは、秘密鍵SecretKeyのところ。
鍵が違えば、復号しても失敗するよね、というのを見たかったのだ。
1: import java.util.Arrays;
2: 3: import javax.crypto.Cipher;
4: import javax.crypto.SecretKey;
5: import javax.crypto.SecretKeyFactory;
6: import javax.crypto.spec.DESedeKeySpec;
7: 8: public class CipherTest {
9: 10: /**
11: * @param args
12: */
13: public static void main(String[] args) {
14: try {
15: /*
16: * 鍵
17: */
18: SecretKeyFactory kf = SecretKeyFactory.getInstance("DESede");
19: 20: // 秘密鍵1を準備
21: byte[] key1 = "12345678abcdefgh12345678".getBytes();
22: DESedeKeySpec dk1 = new DESedeKeySpec(key1);
23: Arrays.fill(key1, (byte)0x00);
24: SecretKey sk1 = kf.generateSecret(dk1); 25: dk1 = null; 26: 27: // 秘密鍵2を準備
28: byte[] key2 = "12345678abcdefgh12345679".getBytes();
29: DESedeKeySpec dk2 = new DESedeKeySpec(key2);
30: Arrays.fill(key2, (byte)0x00);
31: SecretKey sk2 = kf.generateSecret(dk2); 32: dk2 = null; 33: 34: kf = null; 35: 36: /*
37: * 暗号化
38: */
39: // 暗号化準備
40: Cipher c = Cipher.getInstance("DESede/ECB/NoPadding");
41: 42: c.init(Cipher.ENCRYPT_MODE, sk1);43: byte[] cleartext = "abcdefghijklmnop".getBytes();
44: // 暗号化
45: byte[] encrypted = c.doFinal(cleartext);
46: 47: /*
48: * 復号1
49: */
50: // 復号準備
51: c.init(Cipher.DECRYPT_MODE, sk1);52: // 復号
53: byte[] output = c.doFinal(encrypted);
54: 55: // 表示
56: System.out.println("[sk1]The string was ");
57: System.out.println(new String(output));
58: 59: /*
60: * 復号2
61: */
62: // 復号準備
63: c.init(Cipher.DECRYPT_MODE, sk2);64: // 復号
65: byte[] output2 = c.doFinal(encrypted);
66: 67: // 表示
68: System.out.println("[sk2]The string was ");
69: System.out.println(new String(output2));
70: 71: } catch (Exception e) {
72: e.printStackTrace(); 73: } 74: } 75: }結果
1: [sk1]The string was 2: abcdefghijklmnop 3: [sk2]The string was 4: abcdefghijklmnop
あれ?
違う鍵で復号させたのに、正しい結果が出てしまった。
12345678abcdefgh12345678
12345678abbdefgh12345678→一致
12345678abddefgh12345678→不一致
12345678accdefgh12345678→一致
12345678adcdefgh12345678→不一致
文字位置とずらし方に関係がありそうだ。
03254769`cbedgfi03254769→一致
うーん、何か間違ってるのかなぁ・・・。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。