+1 (315) 557-6473 

Create a Program to Create Vigènere Cipher in Java Assignment Solution.


Instructions

Objective
Write a program to create Vigènere Cipher in java language.

Requirements and Specifications

program to create Vigènere Cipher in java

Source Code

/*=============================================================================

| Assignment: pa01 - Encrypting a plaintext file using the Vigenere cipher

|

| Author: Your name here

| Language: Java

|

| To Compile: javac pa01.java

|

| To Execute: java -> java pa01 kX.txt pX.txt

| where kX.txt is the keytext file

| and pX.txt is plaintext file

|

| Note: All input files are simple 8 bit ASCII input

|

| Class: CIS3360 - Security in Computing - Summer 2021

| Instructor: McAlpin

| Due Date: per assignment

|

+=============================================================================*/

import java.io.BufferedReader;

import java.io.FileReader;

public class pa01 {

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

// check number of argumnts

if(args.length < 2)

{

System.out.println("You must provide at least two arguments.");

System.exit(1);

}

// Get name of file with encryption key

String file1 = args[0];

// Get name of file to encrypt

String file2 = args[1];

// Read files

String keyword = "";

String plain_text = "";

int i;

try

{

BufferedReader reader = new BufferedReader(new FileReader(file1));

while((i = reader.read()) != -1)

{

char ch = (char)i;

// convert to lowercase

ch = Character.toLowerCase(ch);

// only use characters that are in the alphabet a-z

if((int)ch >= (int)('a') && (int)ch <= (int)('z'))

keyword += ch;

}

reader.close();

}

catch(Exception e)

{

System.out.println("Could not load keyword file " + file1 + ".");

e.printStackTrace();

}

try

{

BufferedReader reader = new BufferedReader(new FileReader(file2));

while((i = reader.read()) != -1)

plain_text += (char)i;

reader.close();

}

catch(Exception e)

{

System.out.println("Could not load text file " + file2 + ".");

e.printStackTrace();

}

char[][] table = create_table();

String key = generate_key(keyword, plain_text);

String encrypted = encrypt(plain_text, key, table);

String decrypted = decrypt(encrypted, key, table);

System.out.println("Encrypted text: " + encrypted);

System.out.println("");

System.out.println("Original/Decrypted text: " + decrypted);

}

static String encrypt(String text, String key, char[][] table)

{

// index of the starting letter

int start = 'a';

// cpy the text and convert to lower

String text_copy = text.toLowerCase();

// variable to store the encrypted text

String encrypted = "";

int row, col;

char encrypted_ch;

int i = 0;

for(char ch: text_copy.toCharArray())

{

// check if the character is in the alphabet

if((int)ch < (int)('a') || (int)ch > (int)('z'))

{

encrypted += ch;

continue;

}

// get index of row in table

row = ch - start;

col = key.charAt(i) - start;

encrypted_ch = table[row][col];

encrypted += encrypted_ch;

i++;

}

return encrypted;

}

static String decrypt(String text, String key, char[][] table)

{

// index of the starting letter

int start = 'a';

// cpy the text and convert to lower

String text_copy = text.toLowerCase();

// variable to store the decrypted text

String decrypted = "";

int row, col = 0;

char decrypted_ch;

int i = 0;

for(char ch: text_copy.toCharArray())

{

// check if the character is in the alphabet

if((int)ch < (int)('a') || (int)ch > (int)('z'))

{

decrypted += ch;

continue;

}

// get index of row in table

row = key.charAt(i) - start;

// now, in this row, check in which column the letter of the encrypted text appears

for(int j = 0; j < 26; j++)

{

if(table[row][j] == ch)

{

col = j;

break;

}

}

decrypted_ch = (char)(col+start);

decrypted += decrypted_ch;

i++;

}

return decrypted;

}

static String generate_key(String keyword, String text)

{

// get length of text to encrypt

int N = text.length();

// Generate the key by repeating keyword until its length is higher than N

int keyword_N = keyword.length();

String key = keyword;

while(keyword_N < N)

{

key += keyword;

keyword_N = key.length();

}

// Now, cut the given key so the length is equal to N

key = key.substring(0, N);

return key.toLowerCase();

}

static char[][] create_table()

{

/*

This function will create the Vigenere Table

*/

char[][] table = new char[26][26];

int start = 'a';

int ch = start;

for(int i = 0; i < 26; i++)

{

ch = start+i;

for(int j = 0; j < 26; j++)

{

table[i][j] = (char)ch;

ch++;

if(ch > (int)('z'))

ch = 'a';

}

}

return table;

}

}

/*=============================================================================

| I [your name] ([your NID]) affirm that this program is

| entirely my own work and that I have neither developed my code together with

| any another person, nor copied any code from any other person, nor permitted

| my code to be copied or otherwise used by any other person, nor have I

| copied, modified, or otherwise used programs created by others. I acknowledge

| that any violation of the above terms will be treated as academic dishonesty.

+=============================================================================*/