· 5 years ago · May 15, 2020, 05:38 PM
1import java.io.File;
2import java.io.FileInputStream;
3import java.io.IOException;
4import java.security.MessageDigest;
5import java.security.NoSuchAlgorithmException;
6import java.util.Scanner;
7
8import javax.crypto.Cipher;
9import javax.crypto.spec.SecretKeySpec;
10
11public class Hiddec {
12
13 private static SecretKeySpec secretKey;
14 private static byte[] key;
15
16 public static byte[] getmd5Hash(byte[] inputKey) throws NoSuchAlgorithmException
17 {
18 MessageDigest md5 = MessageDigest.getInstance("MD5");
19 return md5.digest(inputKey);
20 }
21
22 public static byte[] encrypt(byte[] strToEncrypt, byte[] secret)
23 {
24 MessageDigest md5 = null;
25 try
26 {
27 key = secret;
28 md5 = MessageDigest.getInstance("MD5");
29 key = md5.digest(key);
30 secretKey = new SecretKeySpec(key, "AES");
31
32 Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");
33 cipher.init(Cipher.ENCRYPT_MODE, secretKey);
34 byte[] encrypted = null;
35 encrypted = cipher.doFinal(strToEncrypt);
36 return encrypted;
37 }
38 catch (Exception e)
39 {
40 System.out.println("Error while encrypting: " + e.toString());
41 }
42 return null;
43 }
44
45 public static byte[] decrypt(byte[] encryptedString, byte[] secret)
46 {
47 MessageDigest md5 = null;
48 try
49 {
50 key = secret;
51 md5 = MessageDigest.getInstance("MD5");
52 key = md5.digest(key);
53 secretKey = new SecretKeySpec(key, "AES");
54
55 Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");
56 cipher.init(Cipher.DECRYPT_MODE, secretKey);
57 byte[] decrypted = null;
58 decrypted = cipher.doFinal(encryptedString);
59 return decrypted;
60 }
61 catch (Exception e)
62 {
63 System.out.println("Error while decrypting: " + e.toString());
64 }
65 return null;
66 }
67
68 public static void main(String[] args) throws NoSuchAlgorithmException
69 {
70
71 byte[] originalData = null;
72 Scanner input;
73 String keyFromFile = "";
74
75 //read key from key file as string
76 try {
77 File keyFile = new File(args[0]);
78 input = new Scanner(keyFile);
79 keyFromFile = input.nextLine();
80
81 } catch (IOException ioException) {
82 System.err.println("keyFile can not be opened");
83 System.exit(1);
84 }
85
86 // read .data file
87 try{
88
89 FileInputStream fin = new FileInputStream(args[1]);
90 originalData = fin.readAllBytes();
91 fin.close();
92
93 }catch(Exception e){
94 System.out.println(e);
95 }
96
97 //hex key -> byte
98 byte[] keyByteArray = hexStringToByteArray(keyFromFile);
99
100 //we get the hash of the key
101 byte[] keyHash = getmd5Hash(keyByteArray);
102
103 //printing the hash of key as bytes
104 System.out.println("keyHash = ");
105 for(int i=0;i<keyHash.length;i++) {
106 System.out.print(keyHash[i] + " ");
107 }
108 System.out.println();
109
110 //we decrypt the file
111 byte[] decryptedData = Hiddec.decrypt(originalData, keyByteArray) ;
112
113 //we print the decrypted file as bytes
114 System.out.println("decryptedData = ");
115 for(int i=0;i<decryptedData.length;i++) {
116 System.out.print(decryptedData[i] + " ");
117 }
118 }
119
120
121 //help function
122 public static byte[] hexStringToByteArray(String s) {
123 int len = s.length();
124 byte[] data = new byte[len / 2];
125 for (int i = 0; i < len; i += 2) {
126 data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
127 + Character.digit(s.charAt(i+1), 16));
128 }
129 return data;
130 }
131
132}