Name: Dhir Talreja
Roll No: A115
EXPERIMENT 2
Code:
CaeserCipher.java:
import java.lang.*;
class EncryptData{
int key;
public EncryptData(int key)
this.key = key;
public String Encryp on(String textContent)
char[] charArray = new char[textContent.length()];
for(int i=0;i<textContent.length();i++)
char ch = textContent.charAt(i);
if(Character.isLe er(ch))
int base;
if(Character.isUpperCase(ch))
base = 65;
else{
base = 97;
int encryptedInt = ((int)ch - base + key) % 26 + base;
if(encryptedInt < 0)
encryptedInt += 26;
char encryptedChar = (char) encryptedInt;
charArray[i] = encryptedChar;
} else {
charArray[i] = ch;
return new String(charArray);
class DecryptData {
int key;
public DecryptData(int key){
this.key = key;
public String Decryp on(String encrytedContent) {
char[] charArray = new char[encrytedContent.length()];
for(int i=0;i<encrytedContent.length();i++)
char ch = encrytedContent.charAt(i);
if(Character.isLe er(ch))
int base;
if(Character.isUpperCase(ch))
base = 65;
else {
base = 97;
int decryptedInt = ((int)ch - base - key + 26) % 26 + base;
if(decryptedInt < 0)
decryptedInt += 26;
char decryptedChar = (char)decryptedInt;
charArray[i] = decryptedChar;
else{
charArray[i] = ch;
return new String(charArray);
import java.u l.Scanner;
public class Main {
public sta c void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("Enter the encryp on key: ");
int key = scanner.nextInt();
scanner.nextLine(); // Consume the newline character
EncryptData encryptor = new EncryptData(key);
DecryptData decryptor = new DecryptData(key);
System.out.print("Enter the text to encrypt: ");
String originalText = scanner.nextLine();
// Encryp on
String encryptedText = encryptor.Encryp on(originalText);
System.out.println("Encrypted Text: " + encryptedText);
// Decryp on
String decryptedText = decryptor.Decryp on(encryptedText);
System.out.println("Decrypted Text: " + decryptedText);
scanner.close();
Output:
HillCipher.java:
import java.u l.Scanner;
public class HillCipher {
public sta c void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Enter the key (a string of characters, e.g., KEYMATRIX):");
String keyString = scanner.next().toUpperCase();
System.out.println("Enter the plaintext (in uppercase):");
String plaintext = scanner.next().toUpperCase();
int matrixSize = (int) Math.ceil(Math.sqrt(keyString.length()));
while (matrixSize * matrixSize < keyString.length()) {
matrixSize++;
int[][] keyMatrix = generateKeyMatrix(keyString, matrixSize);
while (plaintext.length() % matrixSize != 0) {
plaintext += 'X';
String ciphertext = encrypt(plaintext, keyMatrix);
System.out.println("Encrypted text: " + ciphertext);
scanner.close();
public sta c int[][] generateKeyMatrix(String keyString, int matrixSize) {
int[][] keyMatrix = new int[matrixSize][matrixSize];
int index = 0;
for (int i = 0; i < matrixSize; i++) {
for (int j = 0; j < matrixSize; j++) {
if (index < keyString.length()) {
keyMatrix[i][j] = keyString.charAt(index++) - 'A';
} else {
// If the key is shorter than the matrix size, fill with random values
keyMatrix[i][j] = (int) (Math.random() * 26);
return keyMatrix;
public sta c String encrypt(String plaintext, int[][] keyMatrix) {
StringBuilder ciphertext = new StringBuilder();
int matrixSize = keyMatrix.length;
for (int i = 0; i < plaintext.length(); i += matrixSize) {
int[] block = new int[matrixSize];
for (int j = 0; j < matrixSize; j++) {
block[j] = plaintext.charAt(i + j) - 'A';
for (int j = 0; j < matrixSize; j++) {
int sum = 0;
for (int k = 0; k < matrixSize; k++) {
sum += keyMatrix[j][k] * block[k];
ciphertext.append((char) ((sum % 26) + 'A'));
}
return ciphertext.toString();
OUTPUT: