こんなソースを書いた。
いや、書いたというのはおこがましい。
こちらの記事のソースファイルをまるまるコピーして一部書き換えただけだ。
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 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。