1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package goldengate.common.crypto;
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 public class Blowfish extends KeyObject {
43
44
45
46 public final static int KEY_SIZE = 56;
47 public final static String ALGO = "Blowfish";
48 public final static String INSTANCE = "Blowfish";
49 public final static String EXTENSION = "blf";
50
51
52
53
54
55 @Override
56 public String getAlgorithm() {
57 return "Blowfish";
58 }
59
60
61
62
63 @Override
64 public String getInstance() {
65 return "Blowfish";
66 }
67
68
69
70
71 @Override
72 public int getKeySize() {
73 return KEY_SIZE;
74 }
75
76
77
78
79
80
81
82 public static void main(String[] args) throws Exception {
83 String plaintext = null;
84 if (args.length != 0) {
85 plaintext = args[0];
86 }
87 if (plaintext == null || plaintext.length() == 0) {
88 plaintext = "This is a try for a very long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long long String";
89 }
90 System.out.println("plaintext = " + plaintext);
91 Blowfish bf = new Blowfish();
92
93 bf.generateKey();
94
95 byte[] secretKey = bf.getSecretKeyInBytes();
96
97 byte[] ciphertext = bf.crypt(plaintext);
98
99 System.out.println(ciphertext.length);
100 System.out.println("ciphertext = " + bf.encodeHex(ciphertext));
101
102
103 bf.setSecretKey(secretKey);
104
105 String plaintext2 = bf.decryptInString(ciphertext);
106
107 System.out.println("plaintext2 = " + plaintext2);
108 if (!plaintext2.equals(plaintext))
109 System.out.println("Error: plaintext2 != plaintext");
110
111
112 int nb = 100000;
113 long time1 = System.currentTimeMillis();
114 for (int i = 0; i < nb ; i++) {
115 String cipherString = bf.cryptToHex(plaintext);
116
117 String plaintext3 = bf.decryptHexInString(cipherString);
118
119 if (!plaintext3.equals(plaintext))
120 System.out.println("Error: plaintext3 != plaintext");
121 }
122 long time2 = System.currentTimeMillis();
123 System.out.println("Total time in ms: "+(time2-time1)+" or "+(nb*1000/(time2-time1))+" crypt or decrypt/s");
124 }
125
126 }