· 7 years ago · Jun 11, 2018, 09:58 AM
1let decrypted = CryptoJS.AES.decrypt(e.target.result, CryptoJS.enc.Utf8.parse(key), {
2 iv: CryptoJS.enc.Utf8.parse(iv),
3 mode: CryptoJS.mode.CBC,
4 padding: CryptoJS.pad.Pkcs7
5});
6
7import javax.crypto.Cipher;
8import javax.crypto.SecretKey;
9import javax.crypto.spec.IvParameterSpec;
10import javax.crypto.spec.SecretKeySpec;
11import java.io.File;
12import java.io.FileInputStream;
13import java.io.FileOutputStream;
14
15public class Test {
16 private SecretKey secretKey;
17 private IvParameterSpec ivParameterSpec;
18
19 private String key = "ThisIsMyGreatKey";
20 private byte[] ivKey = "ABCDEFGHabcdefgh".getBytes();
21
22 public static void main(String[] args) {
23 try {
24 new Test().run();
25 } catch (Exception e) {
26 e.printStackTrace();
27 }
28 }
29
30 private void run() {
31 ivParameterSpec = new IvParameterSpec(ivKey);
32 secretKey = new SecretKeySpec(key.getBytes(), "AES");
33 encryptOrDecryptFile(Cipher.ENCRYPT_MODE,
34 new File("src/cactus.jpg"), new File("src/cactus-encrypted.jpg"));
35 }
36
37 private void encryptOrDecryptFile(int mode, File inputFile, File outputFile) {
38 try {
39 Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
40 cipher.init(mode, secretKey, ivParameterSpec);
41
42 // Read input
43 byte[] input = new byte[(int) inputFile.length()];
44 FileInputStream inputStream = new FileInputStream(inputFile);
45 inputStream.read(input);
46
47 // Encrypt and write to output
48 byte[] output = cipher.doFinal(input);
49 FileOutputStream outputStream = new FileOutputStream(outputFile);
50 outputStream.write(output);
51
52 inputStream.close();
53 outputStream.close();
54 } catch (Exception e) {
55 e.printStackTrace();
56 }
57 }
58}
59
60<input type="file" id="file-input" onchange="handleFile(this)">
61<button onclick="useEncryptionForFile()" id="encrypt-file">Encrypt File</button>
62<button onclick="useDecryptionForFile()" id="decrypt-file">Decrypt File</button>
63<textarea id="output"></textarea>
64<img id="example">
65
66<script>
67 let key = "ThisIsMyGreatKey";
68 let iv = "ABCDEFGHabcdefgh";
69 let useEncryption, useDecryption;
70
71 let input = document.getElementById("file-input");
72 let output = document.getElementById("output");
73 let example = document.getElementById("example");
74
75 function handleFile(element) {
76 if (element.files && element.files[0]) {
77 let file = element.files[0];
78 if (useDecryption) {
79 decryptFile(file);
80 } else {
81 encryptFile(file);
82 }
83 }
84 }
85
86 function encryptFile(file) {
87 let reader = new FileReader();
88
89 reader.onload = function (e) {
90 let encrypted = CryptoJS.AES.encrypt(e.target.result, CryptoJS.enc.Utf8.parse(key), {
91 iv: CryptoJS.enc.Utf8.parse(iv),
92 mode: CryptoJS.mode.CBC,
93 padding: CryptoJS.pad.Pkcs7
94 });
95
96 output.textContent = encrypted;
97
98 let a = document.createElement("a");
99 a.setAttribute('href', 'data:application/octet-stream,' + encrypted);
100 a.setAttribute('download', file.name + '.encrypted');
101 a.click();
102 };
103
104 reader.readAsDataURL(file);
105 }
106
107 function decryptFile(file) {
108 let reader = new FileReader();
109 reader.onload = function (e) {
110 let decrypted = CryptoJS.AES.decrypt(e.target.result, CryptoJS.enc.Utf8.parse(key), {
111 iv: CryptoJS.enc.Utf8.parse(iv),
112 mode: CryptoJS.mode.CBC,
113 padding: CryptoJS.pad.Pkcs7
114 });
115
116 // Decrypted is emtpy
117 output.textContent = decrypted;
118
119 // Desperate try to get something working
120 example.src = "data:image/png;base64," + btoa(decrypted);
121
122 let a = document.createElement("a");
123 a.setAttribute('href', decrypted);
124 a.setAttribute('download', file.name.replace('encrypted', 'decrypted'));
125 a.click();
126 };
127
128 reader.readAsText(file);
129 }
130
131 function useEncryptionForFile() {
132 document.getElementById("encrypt-file").style.backgroundColor = "#757575";
133 document.getElementById("decrypt-file").style.backgroundColor = "#FFFFFF";
134 useEncryption = true;
135 useDecryption = false;
136 }
137
138 function useDecryptionForFile() {
139 document.getElementById("encrypt-file").style.backgroundColor = "#FFFFFF";
140 document.getElementById("decrypt-file").style.backgroundColor = "#757575";
141 useDecryption = true;
142 useEncryption = false;
143 }
144</script>
145
146private static String encodeFileToBase64Binary(String fileName) throws IOException {
147 File file = new File(fileName);
148 byte[] encoded = Base64.encodeBase64(FileUtils.readFileToByteArray(file));
149 return new String(encoded, StandardCharsets.US_ASCII);
150}
151
152function base64toFile(encodedstring,filename,mimeType){
153 return new File([encodedstring.arrayBuffer()],filename, {type:mimeType});
154
155}
156
157//Usage example:
158base64toFile('aGVsbG8gd29ybGQ=', 'hello.txt', 'text/plain');