Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Java 1 Details of the program 1. Implement an encryption function that performs

ID: 3667652 • Letter: J

Question

Java

1 Details of the program

1. Implement an encryption function that performs four rounds of encryption, using the S1 and S2 boxes, and key generation schemes discussed in class.

2. Implement an decryption function that performs four rounds of decryption, using the S1 and S2 boxes, and key generation schemes discussed in class.

3. Use the following plaintext = 100010110101 and K = 111000111, print out bit strings of L1 R1, L2 R2, L3 R3, and L4 R4.

4. Decrypt your cipher text L4 R4, and print out bit strings of L3 R3, L2 R2, L1 R1, and L0 R0.

Explanation / Answer

Here we can generate key generation Schema, and encryption, decryption using RSA Algorithm Concept. We can also decrypt the Cipher text.

package encryptionmethod;

import java.io.File;

import java.io.FileInputStream;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

import java.io.ObjectOutputStream;

import java.security.KeyPair;

import java.security.KeyPairGenerator;

import java.security.NoSuchAlgorithmException;

import java.security.PrivateKey;

import java.security.PublicKey;

import javax.crypto.Cipher;

/**

*

* @author HARE KRISHNA

*/

public class EncryptionUtil {

/**

   * String to hold name of the encryption algorithm.

   */

public static final String ALGORITHM = "RSA";

/**

   * String to hold the name of the private key file.

   */

public static final String PRIVATE_KEY_FILE = "C:/keys/private.key";

/**

   * String to hold name of the public key file.

   */

public static final String PUBLIC_KEY_FILE = "C:/keys/public.key";

/**

   * Generate key which contains a pair of private and public key using 1024

   * bytes. Store the set of keys in Prvate.key and Public.key files.

*/

public static void generateKey() {

    try {

      final KeyPairGenerator keyGen = KeyPairGenerator.getInstance(ALGORITHM);

     //here key generation

      keyGen.initialize(1024);

      final KeyPair key = keyGen.generateKeyPair();

      File privateKeyFile = new File(PRIVATE_KEY_FILE);

      File publicKeyFile = new File(PUBLIC_KEY_FILE);

      // Create files to store public and private key

      if (privateKeyFile.getParentFile() != null) {

        privateKeyFile.getParentFile().mkdirs();

      }

     

privateKeyFile.createNewFile();

      if (publicKeyFile.getParentFile() != null) {

        publicKeyFile.getParentFile().mkdirs();

      }

     publicKeyFile.createNewFile();

      // Saving the Public key in a file

      ObjectOutputStream publicKeyOS = new ObjectOutputStream(

          new FileOutputStream(publicKeyFile));

      publicKeyOS.writeObject(key.getPublic());

      publicKeyOS.close();

      // Saving the Private key in a file

      ObjectOutputStream privateKeyOS = new ObjectOutputStream(

          new FileOutputStream(privateKeyFile));

      privateKeyOS.writeObject(key.getPrivate());

      privateKeyOS.close();

    } catch (Exception e) {

      e.printStackTrace();

    }

}

/**

   * The method checks if the pair of public and private key has been generated.

   *

   * @return flag indicating if the pair of keys were generated.

   */

public static boolean areKeysPresent() {

    File privateKey = new File(PRIVATE_KEY_FILE);

    File publicKey = new File(PUBLIC_KEY_FILE);

    if (privateKey.exists() && publicKey.exists()) {

      return true;

    }

    return false;

}

/**

   * Encrypt the plain text using public key.

   *

*/

public static byte[] encrypt(String text, PublicKey key) {

    byte[] cipherText = null;

    try {

      // get an RSA cipher object and print the provider

      final Cipher cipher = Cipher.getInstance(ALGORITHM);

      // encrypt the plain text using the public key

      cipher.init(Cipher.ENCRYPT_MODE, key);

      cipherText = cipher.doFinal(text.getBytes());

    }

catch (Exception e) {

      e.printStackTrace();

    }

    return cipherText;

}

/**

   * Decrypt text using private key.

   *

   * @param text

   *          :encrypted text

   * @param key

   *          :The private key

   * @return plain text

   * @throws java.lang.Exception

   */

public static String decrypt(byte[] text, PrivateKey key) {

    byte[] dectyptedText = null;

    try {

      // get an RSA cipher object and print the provider

      final Cipher cipher = Cipher.getInstance(ALGORITHM);

      // decrypt the text using the private key

      cipher.init(Cipher.DECRYPT_MODE, key);

      dectyptedText = cipher.doFinal(text);

    } catch (Exception ex) {

      ex.printStackTrace();

    }

    return new String(dectyptedText);

}

/**

   * Test the EncryptionUtil

   */

public static void main(String[] args) {

    try {

      // Check if the pair of keys are present else generate those.

      if (!areKeysPresent()) {

        // Method generates a pair of keys using the RSA algorithm and stores it

        // in their respective files

        generateKey();

      }

      final String originalText = "Text to be encrypted ";

      ObjectInputStream inputStream = null;

      // Encrypt the string using the public key

      inputStream = new ObjectInputStream(new FileInputStream(PUBLIC_KEY_FILE));

      final PublicKey publicKey = (PublicKey) inputStream.readObject();

      final byte[] cipherText = encrypt(originalText, publicKey);

      // Decrypt the cipher text using the private key.

      inputStream = new ObjectInputStream(new FileInputStream(PRIVATE_KEY_FILE));

      final PrivateKey privateKey = (PrivateKey) inputStream.readObject();

      final String plainText = decrypt(cipherText, privateKey);

      // Printing the Original, Encrypted and Decrypted Text

      System.out.println("Original: " + originalText);

      System.out.println("Encrypted: " +cipherText.toString());

      System.out.println("Decrypted: " + plainText);

    } catch (Exception e) {

      e.printStackTrace();

    }

}

}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote