You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
163 lines
5.6 KiB
163 lines
5.6 KiB
import java.lang.Object;
|
|
import javax.crypto.*;
|
|
import java.security.*;
|
|
import java.io.*;
|
|
import javax.crypto.spec.SecretKeySpec;
|
|
import java.util.Scanner;
|
|
public class AESEncryption
|
|
{
|
|
public static void main(String[] args)
|
|
{
|
|
Scanner input = new Scanner(System.in);
|
|
System.out.print("Enter E for encyrption or D for decryption: ");
|
|
String a = input.nextLine();
|
|
if(a.equals("E"))
|
|
{
|
|
encrypt();
|
|
}
|
|
else
|
|
{
|
|
decrypt();
|
|
}
|
|
}
|
|
public static void encrypt()
|
|
{
|
|
Scanner input = new Scanner(System.in);
|
|
System.out.print("Enter the file name: ");
|
|
String fileName = input.nextLine();
|
|
File file = new File(fileName);
|
|
try
|
|
{
|
|
// create secret key
|
|
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
|
|
keyGen.init(128);
|
|
SecretKey key = keyGen.generateKey();
|
|
|
|
// initialize aes encryption object
|
|
Cipher cipher = Cipher.getInstance("AES");
|
|
cipher.init(Cipher.ENCRYPT_MODE, key);
|
|
|
|
// read in bytes
|
|
FileInputStream fis = new FileInputStream(file);
|
|
byte[] byteArray = new byte[(int)file.length()];
|
|
int buffer = fis.read(byteArray);
|
|
|
|
// encrypt bytes
|
|
byte[] bArray = cipher.doFinal(byteArray);
|
|
|
|
// write bytes (in place)
|
|
FileOutputStream fos = new FileOutputStream(file);
|
|
fos.write(bArray);
|
|
|
|
// write key to file
|
|
FileOutputStream encodedKey = new FileOutputStream("key.txt");
|
|
byte[] keys = key.getEncoded();
|
|
encodedKey.write(keys);
|
|
|
|
// close result file
|
|
fis.close();
|
|
fos.close();
|
|
|
|
// close key file
|
|
encodedKey.close();
|
|
}
|
|
catch(FileNotFoundException fnfe)
|
|
{
|
|
System.out.println("File Not Found");
|
|
}
|
|
catch(IOException ioe)
|
|
{
|
|
System.out.println("Signals that an I/O exception of some sort has occurred.");
|
|
}
|
|
catch(IllegalBlockSizeException ibse)
|
|
{
|
|
System.out.println(" no padding has been requested (only in encryption mode), and the total input length of the data processed by this cipher is not a multiple of block size; or if this encryption algorithm is unable to process the input data provided");
|
|
}
|
|
catch(BadPaddingException bpe)
|
|
{
|
|
System.out.println("if this cipher is in decryption mode, and (un)padding has been requested, but the decrypted data is not bounded by the appropriate padding bytes");
|
|
}
|
|
catch(NoSuchPaddingException nspe)
|
|
{
|
|
System.out.println("a particular padding mechanism is requested but is not available in the environment");
|
|
}
|
|
catch(NoSuchAlgorithmException nsae)
|
|
{
|
|
System.out.println("cryptographic algorithm is requested but is not available in the environment");
|
|
}
|
|
catch(InvalidKeyException ike)
|
|
{
|
|
System.out.println("the given key is inappropriate for initializing this cipher");
|
|
}
|
|
}
|
|
public static void decrypt()
|
|
Scanner input = new Scanner(System.in);
|
|
System.out.print("Enter the file name of whats to be decrypted: ");
|
|
String fileName = input.nextLine();
|
|
System.out.print("Enter the file name of the key: ");
|
|
String keyName = input.nextLine();
|
|
File encryptedFile = new File(fileName);
|
|
File encryptedKey = new File(keyName);
|
|
try
|
|
{
|
|
// load all data
|
|
FileInputStream fisKey = new FileInputStream(encryptedKey);
|
|
FileInputStream fisFile = new FileInputStream(encryptedFile);
|
|
FileOutputStream fos = new FileOutputStream("decryptedFile.txt");
|
|
|
|
// initialize output byte array
|
|
byte[] fileArray = new byte[(int)encryptedFile.length()];
|
|
int buffer2 = fisFile.read(fileArray);
|
|
|
|
// initialize key byte array
|
|
byte[] keyBytes = new byte[(int)encryptedKey.length()];
|
|
int buffer = fisKey.read(keyBytes);
|
|
|
|
// construct secret key from key bytes
|
|
SecretKeySpec key = new SecretKeySpec(keyBytes, "AES");
|
|
|
|
// initialize cipher and decrypt
|
|
Cipher cipher = Cipher.getInstance("AES");
|
|
cipher.init(Cipher.DECRYPT_MODE, key);
|
|
byte[] cipherBytes = cipher.doFinal(fileArray);
|
|
|
|
// write to file
|
|
fos.write(cipherBytes);
|
|
fisKey.close();
|
|
fos.close();
|
|
fisFile.close();
|
|
}
|
|
catch(FileNotFoundException fnfe)
|
|
{
|
|
System.out.println("File Not Found");
|
|
}
|
|
catch(IOException ioe)
|
|
{
|
|
System.out.println("Signals that an I/O exception of some sort has occurred.");
|
|
}
|
|
catch(IllegalBlockSizeException ibse)
|
|
{
|
|
System.out.println(" no padding has been requested (only in encryption mode), and the total input length of the data processed by this cipher is not a multiple of block size; or if this encryption algorithm is unable to process the input data provided");
|
|
}
|
|
catch(NoSuchPaddingException nspe)
|
|
{
|
|
System.out.println("a particular padding mechanism is requested but is not available in the environment");
|
|
}
|
|
catch(NoSuchAlgorithmException nsae)
|
|
{
|
|
System.out.println("cryptographic algorithm is requested but is not available in the environment");
|
|
}
|
|
catch(InvalidKeyException ike)
|
|
{
|
|
System.out.println("the given key is inappropriate for initializing this cipher");
|
|
}
|
|
catch(NullPointerException npe)
|
|
{
|
|
System.out.println("specified algorithm is null");
|
|
}
|
|
catch(GeneralSecurityException gse)
|
|
{
|
|
System.out.println("bad or invalid padding/block");
|
|
}
|
|
}
|
|
}
|