· 6 years ago · Oct 28, 2019, 09:10 PM
1package org.aesfile.LinuxEYE;
2
3import java.io.File;
4import java.io.FileInputStream;
5import java.io.FileOutputStream;
6import java.nio.ByteBuffer;
7import java.security.SecureRandom;
8import java.security.spec.KeySpec;
9import javax.crypto.Cipher;
10import javax.crypto.SecretKey;
11import javax.crypto.SecretKeyFactory;
12import javax.crypto.spec.GCMParameterSpec;
13import javax.crypto.spec.PBEKeySpec;
14import javax.crypto.spec.SecretKeySpec;
15
16public class aesFile {
17
18 public static void main(String[] args) throws Exception {
19 if (args.length != 3) {
20 System.out.println("java -jar *.jar <path to file> <24 character AESKey> <enc|dec>");
21 return;
22 }
23 File file = new File(args[0]);
24 byte[] fileByte = fileToBytes(file);
25 byte[] encByte = encryptBytes(args[1], fileByte);
26 for (int i=0;i<fileByte.length;i++) {
27 System.out.println(fileByte[i]);
28 }
29 System.out.println("plain Bytes");
30 if (args[2].equals("enc")) {
31 createFile(encByte, args[0]);
32 }
33 }
34 public static void createFile(byte[] array, String dest) {
35 try (FileOutputStream fout = new FileOutputStream(dest)) {
36 fout.write(array);
37 }catch (Exception e) {
38 System.out.println("File Outputed");
39 }
40 }
41 public static byte[] fileToBytes(File file) {
42 FileInputStream fis;
43 byte[] byteArray = new byte[(int) file.length()];
44 try {
45 fis = new FileInputStream(file);
46 fis.read(byteArray);
47 fis.close();
48 } catch (Exception e) {
49 e.printStackTrace();
50 }
51 return byteArray;
52 }
53 public static byte[] encryptBytes(String key, byte[] data) throws Exception {
54 SecureRandom sR = new SecureRandom();
55 byte[] iv = new byte[16];
56 sR.nextBytes(iv);
57 SecretKey sK = generateSecretKey(key, iv);
58 Cipher c = Cipher.getInstance("AES/GCM/NoPadding");
59 GCMParameterSpec pS = new GCMParameterSpec(128, iv);
60 c.init(c.ENCRYPT_MODE, sK, pS);
61 byte[] encryptedData = c.doFinal(data);
62 ByteBuffer bb = ByteBuffer.allocate(4 + iv.length + encryptedData.length);
63 bb.putInt(iv.length);
64 bb.put(iv);
65 bb.put(encryptedData);
66 return bb.array();
67 }
68 public static SecretKey generateSecretKey(String password, byte [] iv) throws Exception {
69 KeySpec spec = new PBEKeySpec(password.toCharArray(), iv, 65536, 128);
70 SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
71 byte[] key = secretKeyFactory.generateSecret(spec).getEncoded();
72 return new SecretKeySpec(key, "AES");
73 }
74
75}