· 5 years ago · Feb 25, 2020, 11:40 PM
1
2import javax.crypto.BadPaddingException;
3import java.lang.reflect.Array;
4import java.nio.charset.StandardCharsets;
5import java.security.SecureRandom;
6import java.lang.Math;
7
8class threadImpl implements Runnable {
9 int start, end;
10 byte[] trialkey;
11 String encryptedString,originalString,tName;
12 int keylsbs;
13 String SorgKey;
14 long startTime;
15
16 threadImpl(String name, int start, int end, byte[] trialkey,String encryptedString,String originalString,byte [] orgKey,long time) {
17 this.start = start;
18 this.end = end;
19 this.trialkey = trialkey;
20 this.encryptedString=encryptedString;
21 this.originalString=originalString;
22 this.tName =name;
23 this.SorgKey = new String(orgKey, StandardCharsets.UTF_8);
24 this.startTime = time;
25 }
26
27 @Override
28 public void run() {
29 System.out.println("Thread "+tName + " Start "+start +" end "+end);
30 // TODO Auto-generated method stub
31 for (int counter = start; counter < end; ++counter) {
32 // Fill in low-order key bits.
33 // Try the key.
34
35 int lsbs = keylsbs | counter;
36 // trialkey[29] = (byte) (lsbs >>> 16);
37 // trialkey[30] = (byte) (lsbs >>> 8);
38 trialkey[31] = (byte) (lsbs);
39 //trialkey[31]
40 String dynamicsecretKey = new String(trialkey, StandardCharsets.UTF_8);
41 String dynamicdecryptedString = AES.decrypt(encryptedString, dynamicsecretKey);
42 try {
43 if (originalString.compareTo(dynamicdecryptedString) == 0) {
44
45 System.out.println("found by Thread " + tName + " Counter value " + lsbs);
46 System.out.println("Original " + originalString + " Decrpted " + dynamicdecryptedString);
47 System.out.println("Time required : " +( System.currentTimeMillis() - startTime));
48
49 /*if (dynamicdecryptedString.compareTo(SorgKey) == 0) {
50 System.out.println("KEYS are same");
51 }*/
52 break;
53 }
54 } catch (NullPointerException e) {
55
56 }
57 //System.out.println(tName + " Checked : " + counter);
58 if (counter==end-1) {
59 System.out.println(tName + " reached limit ");
60 }
61 }
62
63 }
64}
65public class MakeKey {
66
67
68
69 static int keylsbs, maxcounter;
70
71 public static void main(String args[]) {
72 byte[] keyArray = SecureRandom.getSeed(32);
73 byte [] orgKey = new byte[32];
74 /*int a = new Byte(orgKey[31]).intValue();
75 System.out.println("Change the last byte value: " + a );*/
76 System.out.println("Change the last byte value: " + keyArray[31] );
77 //byte temp = keyArray[31];
78 //System.out.println(Math.sqrt(-12*-12));
79 //keyArray[31] = (byte) 255;
80 keyArray[31] = (byte) Math.sqrt(keyArray[31]*keyArray[31]);
81 //keyArray[30] = (byte) Math.sqrt(keyArray[30]*keyArray[30]);
82 // keyArray[29] = (byte) Math.sqrt(keyArray[29]*keyArray[29]);
83 System.out.println("Change the last byte value: " + keyArray[31] );
84 System.arraycopy(keyArray, 0, orgKey, 0, 32);
85 // final String secretKey = keyArray.toString();
86
87 String secretKey = new String(keyArray, StandardCharsets.UTF_8);
88
89 String originalString = "howtodoinjava.com";
90 String encryptedString = AES.encrypt(originalString, secretKey);
91
92 for (int i = 31; i < 32; i++) {
93 Array.setByte(keyArray, i, (byte) 0);
94 }
95
96 byte[] trialkey = new byte[32];
97 System.arraycopy(keyArray, 0, trialkey, 0, 32);
98
99 maxcounter = (1 <<8) - 1;
100
101 long startTime = System.currentTimeMillis();
102 //trialkey[31] = (byte) a;
103
104 // System.out.println(new Byte(orgKey[31]).intValue());
105 // System.out.println(AES2.decrypt(encryptedString,new String(trialkey, StandardCharsets.UTF_8)));
106 // Try every possible combination of low-order key bits.
107 int div = maxcounter/8;
108 for (int i=1;i<=7 ;i++ ) {
109 Thread t1 = new Thread(new threadImpl("t"+Integer.toString(i),div*(i-1), div*i, trialkey,encryptedString,originalString,orgKey,startTime));
110 t1.start();
111 }
112 Thread t1 = new Thread(new threadImpl("t"+Integer.toString(8),div*7, maxcounter, trialkey,encryptedString,originalString,orgKey,startTime));
113 t1.start();
114 /*Thread t1 = new Thread(new threadImpl("t1",0, div, trialkey,encryptedString,originalString));
115 Thread t2 = new Thread(new threadImpl("t2",div, div*2, trialkey,encryptedString,originalString));
116 Thread t3 = new Thread(new threadImpl("t3",div*2, div*3, trialkey,encryptedString,originalString));
117 Thread t4 = new Thread(new threadImpl("t4",div*3, maxcounter, trialkey,encryptedString,originalString));
118 t1.start();
119 t2.start();
120 t3.start();
121 t4.start();*/
122
123
124 }
125}