Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package rs.ac.uns.ftn.informatika.ib.crypto;
- import java.io.BufferedWriter;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.nio.file.Files;
- import java.nio.file.Paths;
- import java.security.AlgorithmParameters;
- import java.security.InvalidAlgorithmParameterException;
- import java.security.InvalidKeyException;
- import java.security.NoSuchAlgorithmException;
- import java.security.spec.InvalidParameterSpecException;
- import javax.crypto.BadPaddingException;
- import javax.crypto.Cipher;
- import javax.crypto.IllegalBlockSizeException;
- import javax.crypto.KeyGenerator;
- import javax.crypto.NoSuchPaddingException;
- import javax.crypto.SecretKey;
- import javax.crypto.spec.IvParameterSpec;
- import rs.ac.uns.ftn.informatika.ib.util.Base64;
- public class MyCrypto {
- /**
- * @param args
- */
- private SecretKey secretKey;
- private byte []data;
- private BufferedWriter bw;
- public MyCrypto() {
- //Security.addProvider(new BouncyCastleProvider());
- }
- public void getByteFromFile() {
- try {
- data =Files.readAllBytes(Paths.get("C:\\Users\\Branislav\\Desktop\\bp2\\Uputstvo_za_Oracle_XE.txt"));
- System.out.println("length in bytes: "+ data.length);
- } catch (IOException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- private void generateKey() {
- try {
- //generator para kljuceva za DES algoritam
- KeyGenerator keyGen = KeyGenerator.getInstance("AES");
- //generise kljuc za DES
- secretKey = keyGen.generateKey();
- } catch (NoSuchAlgorithmException e) {
- e.printStackTrace();
- }
- }
- public void saveKey(byte[] key) {
- try {
- /*bw= new BufferedWriter(new FileWriter("kljucevi.txt",true));
- bw.write(key.hashCode());
- bw.newLine();
- bw.close();*/
- File kekFile = new File("kljucevi.txt");
- FileOutputStream f = new FileOutputStream(kekFile);
- f.write(key);
- f.close();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- private void transfer() {
- try {
- Cipher chipEnc = Cipher.getInstance("AES/CBC/PKCS5Padding");
- chipEnc.init(Cipher.ENCRYPT_MODE, secretKey);
- byte[] ciphertext = chipEnc.doFinal(data);
- System.out.println("Kriptovan text: " + Base64.encodeToString(ciphertext));
- saveKey(secretKey.getEncoded());
- //The basic purpose of an IV is to ensure
- //that the encryption function works differently every time
- //it adds an element of randomness, or at least unpredictability
- //to your ciphertexts.
- AlgorithmParameters params = chipEnc.getParameters();
- byte[] iv = params.getParameterSpec(IvParameterSpec.class).getIV();
- Cipher chipDec = Cipher.getInstance("AES/CBC/PKCS5Padding");
- chipDec.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(iv));
- byte[] plainText = chipDec.doFinal(ciphertext);
- System.out.println("Primljeni text: " + new String(plainText));
- }
- catch (NoSuchAlgorithmException | NoSuchPaddingException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (InvalidKeyException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (IllegalBlockSizeException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (BadPaddingException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (InvalidAlgorithmParameterException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- } catch (InvalidParameterSpecException e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- MyCrypto c = new MyCrypto();
- //use symetric AES algorithm
- c.getByteFromFile();
- c.generateKey();
- c.transfer();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement