Using JCA in Java- 5pgs due in 5hrs
import java.security.Key; import javax.crypto.Cipher; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.PBEKeySpec; import javax.crypto.spec.SecretKeySpec; import javax.crypto.spec.PBEParameterSpec; import javax.crypto.spec.SecretKeySpec; /** * Example of using Password-based encryption */ public class PBE { public static void main( String[] args) throws Exception { PBEKeySpec pbeKeySpec; PBEParameterSpec pbeParamSpec; SecretKeyFactory keyFac; // Salt byte[] salt = { (byte)0xc7, (byte)0x73, (byte)0x21, (byte)0x8c, (byte)0x7e, (byte)0xc8, (byte)0xee, (byte)0x99 }; // Iteration count int count = 1024; // Create PBE parameter set pbeParamSpec = new PBEParameterSpec(salt, count); //Initialization of the password char[] password = "newpassword".toCharArray(); //password of length = 512 below //char[] password = "JK5p7s4UbdbVtsGs3dLePLER5jASeRuuFuw5B3STFWBnwfQCsxT6gRytwPyDY2DQNugSrE8BpRu4sLjZAksCQfarXydWW4MbdytfbsbzpKkBpHMeUBP6RV2Xb2Yh8F9xHFxqcht834R3dUFmbx8XXAmLVDjJZADBTByBUC5WExpXkghX4DbyDHCkYuw8ck3t2nYQdZYbjh7b7HmFHvG2FsuwAsC2ZpwB8Qu2aMgTHuHm7HPuk6RK5dDFfrFtb8vCu77kWSpyBjSmhusYvNkcSb8uwaeu2uyygVD6BZbWLApnNk37KKYTkT7qcbckStb44bGYT4pfVFq2E2JGqRkJy5SB7C77GAy6EuDCHec2ZL54DKvM6RPZEkxqaTK4SnCya5Pcn4kQ2C92bs54QxZ3Zwfsu2rDqhwYB3T5mauyhvpqNV4LeNBmuJdYv5hZjDe4knd6ZrX6WjF3PYHxEZ6edr76BGNNgW8er6jRAYpjU5aXyfAfFmBWAENE4TxFYwpq".toCharArray(); //password of length = 1024 below //char[] password = "BpDUrDDk8pUfuwYXXannfnxmvHLq8BSybygZ3vctQS5pEQD2sUurp8ACGWH7PBdJ6kCN3mfKSsJgHgYr9kVevdDSQBwGRGCZbfacWgVJDYCAj7H45YTBk5yqMm7gzUjZSp3PetXbgdQmEqhHtRjeMgzAjevDALfRZmbUhS3URjex998KwVCeZNtSH8jGwqXdwqF8HfQ5RR5CbDTcMCPuD2N84QgrvSV8Sy2hWSXqJYPBX968HnsMG9q9UH5kt4vEdSupLezbf6hgV7McGdUV5G9GWXFy8cMnFe8XJb9zBTfxNRyAZ3UZUk93ZUSqYz7PbFvPdHa8X9VL9YB5K9fYPXdTFEZUpdUMxjfKnKLQZZhUNC8EGuCq4w3nP7S58xVYAAaz4yJKt6XkyWWmVhMPWwgPy5zhkVNLwMz3KhEE7rtRzjNbHXv5MhTZFLdAaHrcJ6PmyLfGK3kjkMwGkXEbQfVB8ctnAuBkBWCkcHEczP3mhAxKdhCyEkJqtJLsj7EZTJ7XKp2g8WJ8XMbmxYdsWXkmFAUmKQG2ndJ3zsvJEtShgKFVxxTm6NKGHhRExxWatVjqVLWgdVvdPzy9QBNrkJAvBNnau2kQJhNVy4WumBqrMTnqRWd8PpkBe5xMnHTaKtHdZGLzUQtbyafnS9E8LgrNSwjvxXzPyQejArADHPfmA7pwpU6fCEpU2KBrwSXJQeL5XsmNmZrKy4PPrUtuCCQBUUBsd6yB2gWmWmCWBb5pXjFrZp4RM8dC77QHdKrHEw3exJL4RbxtuXGWKcMBxLUkUQ6tFb6u2fL9Fc6ybYg6LuZjjCHHZJhb4fs7UX728uYaKQzXcCEBw2ec2RhymHAxmQcedfTpWQVR3PkvHvLemd7PcVVjedACdu7cenRB5zTb6yXQzkzT9AhemSAhHCLxbeHEWty6D9U5QSNuF2ZzvxVucJXFcGVxuxyzjxMYjAtN84nR94ZpuPEXHeahfz9brEfwdSR9r6pgw3G5s8dA4Kb6RcaczhFLcQ7MXvea".toCharArray(); //password of length = 2048 below //char[] password = "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".toCharArray(); //Create parameter for key generation pbeKeySpec = new PBEKeySpec(password); // Create instance of SecretKeyFactory for password-based encryption // using DES and MD5 keyFac = SecretKeyFactory.getInstance("PBEWithMD5AndDES"); long avgEncryptionTime = 0; long avgDecryptionTime = 0; long start,end; // change this to the required number of experiments int experiments=1000; // Our plaintext String plaintext = "Hi, this is a very secret message"; //plaintext of greater length below //String plaintext="Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."; byte[] cleartext = plaintext.getBytes(); for(int i = 0; i<experiments;i++){ //ENCRYPTION //time measurement for encryption starts here (a) start = System.nanoTime(); // Generate a key Key pbeKeyEn = keyFac.generateSecret(pbeKeySpec); // Create PBE Cipher Cipher pbeCipher_en = Cipher.getInstance("PBEWithMD5AndDES"); // Initialize PBE Cipher with key and parameters pbeCipher_en.init(Cipher.ENCRYPT_MODE, pbeKeyEn, pbeParamSpec); // Encrypt the plaintext byte[] ciphertext = pbeCipher_en.doFinal(cleartext); //time measurement for encryption ends here (b) end = System.nanoTime(); //the difference is the execution time from (a) to (b) avgEncryptionTime += (end-start); //DECRYPTION //time measurement for decryption starts here (a) start = System.nanoTime(); // Generate a key Key pbeKeyDe = keyFac.generateSecret(pbeKeySpec); // Create PBE Cipher Cipher pbeCipher_de = Cipher.getInstance("PBEWithMD5AndDES"); // Initialize PBE Cipher with key and parameters pbeCipher_de.init(Cipher.DECRYPT_MODE, pbeKeyDe, pbeParamSpec); // Decrypt using cipher byte[] decrypted_text=pbeCipher_de.doFinal(ciphertext); //time measurement for decryption ends here (b) end = System.nanoTime(); //the difference is the execution time from (a) to (b) avgDecryptionTime += (end-start); } System.out.println("Average key generation + encryption time: "+avgEncryptionTime/(double)experiments); System.out.println("Average key generation + decryption time: "+avgDecryptionTime/(double)experiments); } }