1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package goldengate.common.crypto;
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 public class DynamicKeyObject extends KeyObject {
49
50
51
52
53
54
55
56 public enum INSTANCES {
57 AES(128),
58 ARCFOUR(56),
59 Blowfish(56),
60 DES(56),
61 DESede(112),
62 RC2(56),
63 RC4(56);
64
65 int size;
66
67 private INSTANCES(int size) {
68 this.size = size;
69 }
70 }
71
72
73
74
75
76
77
78
79 public enum INSTANCESMAX {
80 AES(128),
81 ARCFOUR(128),
82 Blowfish(128),
83 DES(56),
84 DESede(168),
85 RC2(128),
86 RC4(128);
87
88 int size;
89
90 private INSTANCESMAX(int size) {
91 this.size = size;
92 }
93 }
94
95
96
97
98 public final int KEY_SIZE;
99
100
101
102 public final String ALGO;
103
104
105
106 public final String INSTANCE;
107
108
109
110 public final String EXTENSION;
111
112
113
114
115
116
117
118
119
120
121
122 public DynamicKeyObject(int kEYSIZE, String aLGO, String iNSTANCE,
123 String eXTENSION) {
124 super();
125 KEY_SIZE = kEYSIZE;
126 ALGO = aLGO;
127 INSTANCE = iNSTANCE;
128 EXTENSION = eXTENSION;
129 }
130
131
132
133
134
135 public DynamicKeyObject(INSTANCES instance,
136 String eXTENSION) {
137 super();
138 KEY_SIZE = instance.size;
139 ALGO = instance.name();
140 INSTANCE = instance.name();
141 EXTENSION = eXTENSION;
142 }
143
144
145
146
147
148 public DynamicKeyObject(INSTANCESMAX instance,
149 String eXTENSION) {
150 super();
151 KEY_SIZE = instance.size;
152 ALGO = instance.name();
153 INSTANCE = instance.name();
154 EXTENSION = eXTENSION;
155 }
156
157
158
159
160
161
162 @Override
163 public String getAlgorithm() {
164 return ALGO;
165 }
166
167
168
169
170
171
172 @Override
173 public String getInstance() {
174 return INSTANCE;
175 }
176
177
178
179
180
181
182 @Override
183 public int getKeySize() {
184 return KEY_SIZE;
185 }
186
187
188
189
190
191
192
193 public static void main(String[] args) throws Exception {
194 String plaintext = null;
195 if (args.length != 0) {
196 plaintext = args[0];
197 }
198 if (plaintext == null || plaintext.length() == 0) {
199 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";
200 }
201 System.out.println("plaintext = " + plaintext);
202 System.out.println("=====================================");
203
204
205 for (INSTANCES instance: INSTANCES.values()) {
206 test(plaintext, instance.size, instance.name());
207 }
208 for (INSTANCESMAX instance: INSTANCESMAX.values()) {
209 test(plaintext, instance.size, instance.name());
210 }
211 }
212
213
214
215
216
217
218
219
220
221 private static void test(String plaintext, int size, String algo)
222 throws Exception {
223 DynamicKeyObject dyn = new DynamicKeyObject(size, algo, algo, algo);
224
225 dyn.generateKey();
226
227 byte[] secretKey = dyn.getSecretKeyInBytes();
228
229 byte[] ciphertext = dyn.crypt(plaintext);
230
231
232
233
234 dyn.setSecretKey(secretKey);
235
236 String plaintext2 = dyn.decryptInString(ciphertext);
237
238
239 if (!plaintext2.equals(plaintext))
240 System.out.println("Error: plaintext2 != plaintext");
241
242
243 int nb = 100000;
244 long time1 = System.currentTimeMillis();
245 for (int i = 0; i < nb; i ++) {
246 String cipherString = dyn.cryptToHex(plaintext);
247
248 String plaintext3 = dyn.decryptHexInString(cipherString);
249
250 if (!plaintext3.equals(plaintext))
251 System.out.println("Error: plaintext3 != plaintext");
252 }
253 long time2 = System.currentTimeMillis();
254 System.out.println(algo + ": Total time: " + (time2 - time1) + " ms, " +
255 (nb * 1000 / (time2 - time1)) + " crypt or decrypt/s");
256 }
257 }