S
S
sex_god2018-12-05 19:02:10
Java
sex_god, 2018-12-05 19:02:10

How to evaluate the cryptographic strength of the AES,PBE algorithm using JAVA?

Is it possible to write a function that somehow calculates the cryptographic strength of the AES and PBE algorithms ?

Code for AES
// Encripting 
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.security.AlgorithmParameters;
import java.security.SecureRandom;
import java.security.spec.KeySpec;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.SecretKeySpec;

public class AES_File_Encryption {

  public static void main(String[] args) throws Exception {
            // Запускаем таймер
            long startTime = System.currentTimeMillis();
            

    // file to be encrypted
    FileInputStream inFile = new FileInputStream(PATH_TO_FILE);
    FileOutputStream outFile = new FileOutputStream("AES_Cripted_File.des");
    // password to encrypt the file
    String password = "javapapers";

    // password, iv and salt should be transferred to the other end
    // in a secure manner

    // salt is used for encoding
    // writing it to a file
    // salt should be transferred to the recipient securely
    // for decryption
    byte[] salt = new byte[8];
    SecureRandom secureRandom = new SecureRandom();
    secureRandom.nextBytes(salt);
    FileOutputStream saltOutFile = new FileOutputStream("salt.enc");
    saltOutFile.write(salt);
    saltOutFile.close();

    SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
    KeySpec keySpec = new PBEKeySpec(password.toCharArray(), salt, 65536,256);
    SecretKey secretKey = factory.generateSecret(keySpec);
    SecretKey secret = new SecretKeySpec(secretKey.getEncoded(), "AES");

    //
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    cipher.init(Cipher.ENCRYPT_MODE, secret);
    AlgorithmParameters params = cipher.getParameters();

    // iv adds randomness to the text and just makes the mechanism more
    // secure
    // used while initializing the cipher
    // file to store the iv
    FileOutputStream ivOutFile = new FileOutputStream("iv.enc");
    byte[] iv = params.getParameterSpec(IvParameterSpec.class).getIV();
    ivOutFile.write(iv);
    ivOutFile.close();

    //file encryption
    byte[] input = new byte[64];
    int bytesRead;

    while ((bytesRead = inFile.read(input)) != -1) {
      byte[] output = cipher.update(input, 0, bytesRead);
      if (output != null)
        outFile.write(output);
    }

    byte[] output = cipher.doFinal();
    if (output != null)
      outFile.write(output);

    inFile.close();
    outFile.flush();
    outFile.close();

    System.out.println("AES File Encrypted.");
                
                // Завершаем таймер
                
                long timeSpent = System.currentTimeMillis() - startTime;
                System.out.println("AES программа выполнялась " + 	
  }

}

// Decripting
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.security.spec.KeySpec;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.SecretKeySpec;

public class AES_File_Decryption {
 
    public static void main(String[] args) throws Exception {

    String password = "javapapers";
    // reading the salt
    // user should have secure mechanism to transfer the
    // salt, iv and password to the recipient
    FileInputStream saltFis = new FileInputStream("salt.enc");
    byte[] salt = new byte[8];
    saltFis.read(salt);
    saltFis.close();

    // reading the iv
    FileInputStream ivFis = new FileInputStream("iv.enc");
    byte[] iv = new byte[16];
    ivFis.read(iv);
    ivFis.close();

    SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA1");
    KeySpec keySpec = new PBEKeySpec(password.toCharArray(), salt, 65536,256);
    SecretKey tmp = factory.generateSecret(keySpec);
    SecretKey secret = new SecretKeySpec(tmp.getEncoded(), "AES");

    // file decryption
    Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
    cipher.init(Cipher.DECRYPT_MODE, secret, new IvParameterSpec(iv));
    FileInputStream fis = new FileInputStream("AES_Cripted_File.des");
    FileOutputStream fos = new FileOutputStream("AES_Deripted_File.txt");
    byte[] in = new byte[64];
    int read;
    while ((read = fis.read(in)) != -1) {
      byte[] output = cipher.update(in, 0, read);
      if (output != null)
        fos.write(output);
    }

    byte[] output = cipher.doFinal();
    if (output != null)
      fos.write(output);
    fis.close();
    fos.flush();
    fos.close();
                
    System.out.println("AES File Decrypted.");
  }
}

Answer the question

In order to leave comments, you need to log in

1 answer(s)
A
Anatoly Zharov, 2018-12-06
@sex_god

Not at all https://ru.wikipedia.org/wiki/%D0%9A%D1%80%D0%B8%D...

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question