· 7 years ago · Jan 18, 2019, 11:08 AM
1/*
2 * To change this template, choose Tools | Templates
3 * and open the template in the editor.
4 */
5package cryptonita;
6
7import com.sun.org.apache.xml.internal.security.utils.Base64;
8import java.io.BufferedReader;
9import java.io.FileNotFoundException;
10import java.io.FileReader;
11import java.security.MessageDigest;
12import java.util.Arrays;
13import java.util.Random;
14import javax.crypto.Cipher;
15import javax.crypto.IllegalBlockSizeException;
16import javax.crypto.SecretKey;
17import javax.crypto.spec.IvParameterSpec;
18import javax.crypto.spec.SecretKeySpec;
19
20/**
21 *
22 * @author albert
23 */
24public class Cryptonita {
25
26 /**
27 * @param args the command line arguments
28 *
29 */
30
31 private final static String TDES_CIPHER = "DESede/CBC/PKCS5Padding";
32
33 public static void main(String[] args) throws Exception {
34
35 String filepath = "symmetric.key";
36
37 // Llegim el fitxer amb la clau
38 BufferedReader br = new BufferedReader(new FileReader(filepath));
39 String base64 = br.readLine();
40 br.close();
41
42 System.out.println("Clau llegida en Base64: " + base64);
43
44 // Passem la clau a bytes
45 byte [] keyBytes = Base64.decode(base64);
46
47 System.out.print("Clau llegida en bytes: ");
48 for (int i = 0; i < keyBytes.length; i++) {
49 System.out.print(keyBytes[i] + " ");
50 }
51 System.out.println(" ");
52
53 String text = "41.13226,1.24486,75.0";
54
55 byte [] codedText = encrypt(text, keyBytes);
56
57 String textB64 = Base64.encode(codedText);
58 System.out.println(textB64);
59
60 String decodedText = decrypt(codedText, keyBytes);
61
62 System.out.println(decodedText);
63
64
65 }
66
67 public static byte [] encrypt (String message, byte [] key) throws Exception {
68
69 final SecretKey secret = new SecretKeySpec(key, "DESede");
70
71 // Generem el vector IV
72 Random r = new Random(secret.hashCode());
73 byte [] b = new byte [8];
74 r.nextBytes(b);
75 final IvParameterSpec iv = new IvParameterSpec(b);
76
77
78 //final IvParameterSpec iv = new IvParameterSpec(new byte[8]);
79 final Cipher cipher = Cipher.getInstance(TDES_CIPHER);
80 cipher.init(Cipher.ENCRYPT_MODE, secret, iv);
81
82 final byte [] plainBytes = message.getBytes("UTF-8");
83 final byte [] cipherText = cipher.doFinal(plainBytes);
84
85 return cipherText;
86 }
87
88 public static String decrypt (byte [] message, byte [] key) throws Exception {
89
90 final SecretKey secret = new SecretKeySpec(key, "DESede");
91
92 // Generem el vector IV
93 Random r = new Random(secret.hashCode());
94 byte [] b = new byte [8];
95 r.nextBytes(b);
96 final IvParameterSpec iv = new IvParameterSpec(b);
97
98 //final IvParameterSpec iv = new IvParameterSpec(new byte[8]);
99 final Cipher cipher = Cipher.getInstance(TDES_CIPHER);
100 cipher.init(Cipher.DECRYPT_MODE, secret, iv);
101
102 final byte [] plainText = cipher.doFinal(message);
103
104 return new String (plainText, "UTF-8");
105 }
106
107}