0% found this document useful (0 votes)
3 views12 pages

Crypto Lab

The document contains Java implementations of various encryption algorithms including DES, Rail Fence, Row and Column Transposition, Caesar Cipher, Hill Cipher, Vigenère Cipher, and Playfair Cipher. Each algorithm is accompanied by example code and expected output for user inputs. The document serves as a comprehensive guide for understanding and implementing these cryptographic techniques in Java.

Uploaded by

jaariyaaynul22
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views12 pages

Crypto Lab

The document contains Java implementations of various encryption algorithms including DES, Rail Fence, Row and Column Transposition, Caesar Cipher, Hill Cipher, Vigenère Cipher, and Playfair Cipher. Each algorithm is accompanied by example code and expected output for user inputs. The document serves as a comprehensive guide for understanding and implementing these cryptographic techniques in Java.

Uploaded by

jaariyaaynul22
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd

DES – Java Program

import [Link].*;

import [Link].*;

import [Link].*;

import [Link].*;

import [Link].*;

class DES {

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

int seed = new Random().nextInt();

KeyGenerator kg = [Link]("DES");

SecureRandom sr = [Link]("SHA1PRNG");

[Link](seed);

[Link](56, sr);

SecretKey k = [Link]();

SecretKeySpec key = new SecretKeySpec([Link](), "DES");

String s = [Link]("Enter message:");

Cipher c = [Link]("DES");

[Link](Cipher.ENCRYPT_MODE, key);
byte[] e = [Link]([Link]());

[Link]("Encrypted Data: " +


[Link]().encodeToString(e));

[Link](Cipher.DECRYPT_MODE, key);
byte[] d = [Link](e);

[Link]("Decrypted Data: " + new String(d));

[Link](null,

"Encrypted Data: " + [Link]().encodeToString(e) +

"\nDecrypted Data: " + new String(d));

}
}
Output

If you enter:

HELLO

Console output will be:

Encrypted Data: <DES ciphertext>

Decrypted Data: HELLO

Or
Encrypted Data: [encrypted data]

Decrypted Data: HELLO

1. Rail Fence Transposition

import [Link].*;

class RailFence {

public static void main(String[] args) {

Scanner sc = new Scanner([Link]);

[Link]("Enter plaintext: ");


String s = [Link]().toUpperCase();
[Link]("Enter depth: ");

int d = [Link]();

int c = ([Link]() + d - 1) / d;

char[][] a = new char[d][c];

int k = 0;

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


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

a[i][j] = k < [Link]() ? [Link](k++) : 'X';

String e = "";

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

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

e += a[i][j];

k = 0;

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

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

a[i][j] = [Link](k++);

String p = "";

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


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

p += a[i][j];

[Link]("Encrypted: " + e);

[Link]("Decrypted: " + p);


}
}
Exact Output

Enter plaintext: HELLOWORLD

Enter depth: 3

Encrypted: HELLOWORLDXX

Decrypted: HELLOWORLDXX

2. Row and Column Transposition

import [Link].*;

class RowColumn {

public static void main(String[] args) {

Scanner sc = new Scanner([Link]);

[Link]("Enter plaintext: ");

String s = [Link]().toUpperCase();

[Link]("Enter keyword: ");

String key = [Link]().toUpperCase();

int c = [Link](), r = ([Link]() + c - 1) / c;

char[][] a = new char[r][c];

int k = 0;
for (int i = 0; i < r; i++)

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

a[i][j] = k < [Link]() ? [Link](k++) : 'X';

Integer[] o = new Integer[c];


for (int i = 0; i < c; i++) o[i] = i;
[Link](o, (x, y) -> [Link](x) - [Link](y));

String e = "";

for (int j : o)

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

e += a[i][j];

k = 0;
for (int j : o)

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

a[i][j] = [Link](k++);

String p = "";

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

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

p += a[i][j];

[Link]("Encrypted: " + e);

[Link]("Decrypted: " + p);

}
Exact Output

Enter plaintext: HELLOWORLD


Enter keyword: ZEBRA

Encrypted: OLREOLLHW

Decrypted: HELLOWORLD

1. Caesar Cipher
Java Program
import [Link].*;

class Caesar {

static String enc(String s, int k) {

String r = "";

for (char c : [Link]())

r += (char)('A' + (c - 'A' + k) % 26);

return r;
}

public static void main(String[] args) {

Scanner sc = new Scanner([Link]);

[Link]("Enter plaintext: ");

String s = [Link]().toUpperCase();

[Link]("Enter key: ");

int k = [Link]();

String c = enc(s, k);

[Link]("Encrypted: " + c);

[Link]("Decrypted: " + enc(c, 26 - k));

}
Exact Output

Enter plaintext: HELLO

Enter key: 3

Encrypted: KHOOR

Decrypted: HELLO

Hill Cipher
Java Program

import [Link].*;

class Hill {

static int[][] k = {{3,3},{2,5}};

static int[][] inv = {{15,17},{20,9}};

static String run(String s, int[][] a) {


s = [Link]();

if ([Link]() % 2 != 0) s += "X";

String r = "";

for (int i = 0; i < [Link](); i += 2) {

int x = [Link](i) - 'A';

int y = [Link](i+1) - 'A';

r += (char)('A' + (a[0][0]*x + a[0][1]*y) % 26);

r += (char)('A' + (a[1][0]*x + a[1][1]*y) % 26);

return r;

public static void main(String[] args) {


Scanner sc = new Scanner([Link]);

[Link]("Enter plaintext: ");

String s = [Link]();

String c = run(s, k);


[Link]("Encrypted: " + c);

[Link]("Decrypted: " + run(c, inv));

}
Exact Output

Enter plaintext: HELP

Encrypted: HIAT

Decrypted: HELP

4. Vigenère Cipher

Java Program

import [Link].*;

class Vigenere {

static String enc(String s, String k) {

String r = "";

for (int i = 0; i < [Link](); i++)

r += (char)('A' + ([Link](i)-'A'

+ [Link](i%[Link]())-'A') % 26);

return r;

static String dec(String s, String k) {

String r = "";

for (int i = 0; i < [Link](); i++)

r += (char)('A' + ([Link](i)-'A'

- [Link](i%[Link]())+'A'+26) % 26);
return r;
}

public static void main(String[] args) {

Scanner sc = new Scanner([Link]);

[Link]("Enter plaintext: ");

String s = [Link]().toUpperCase();

[Link]("Enter key: ");

String k = [Link]().toUpperCase();

String c = enc(s, k);

[Link]("Encrypted: " + c);

[Link]("Decrypted: " + dec(c, k));

}
Exact Output

Enter plaintext: ATTACK

Enter key: LEMON

Encrypted: LXFOPV

Decrypted: ATTACK

Playfair Cipher :

Java Program

import [Link].*;

class Playfair {
static char[][] m = new char[5][5];
static void key(String k) {

String s = "";

k = (k + "ABCDEFGHIKLMNOPQRSTUVWXYZ").toUpperCase();

for (char c : k)

if (c >= 'A' && c <= 'Z' && c != 'J' && [Link](c) < 0)

s += c;

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

m[i / 5][i % 5] = [Link](i);

static int[] pos(char c) {

if (c == 'J') c = 'I';

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

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

if (m[i][j] == c) return new int[]{i, j};

return null;

static String run(String s, int d) {

s = [Link]().replace("J", "I").replaceAll("[^A-Z]", "");


String p = "";

for (int i = 0; i < [Link](); i++) {

char a = [Link](i);

char b = i + 1 < [Link]() ? [Link](i + 1) : 'Z';


p += a;
if (a == b) p += 'Z';

else { p += b; i++; }

String r = "";

for (int i = 0; i < [Link](); i += 2) {

int[] a = pos([Link](i)), b = pos([Link](i + 1));

if (a[0] == b[0]) {

r += m[a[0]][(a[1] + d + 5) % 5];

r += m[b[0]][(b[1] + d + 5) % 5];

} else if (a[1] == b[1]) {

r += m[(a[0] + d + 5) % 5][a[1]];

r += m[(b[0] + d + 5) % 5][b[1]];

} else {

r += m[a[0]][b[1]];

r += m[b[0]][a[1]];

return r;

public static void main(String[] args) {


Scanner sc = new Scanner([Link]);

[Link]("Enter key: ");

key([Link]());

[Link]("Enter plaintext: ");


String s = [Link]();

String c = run(s, 1);

[Link]("Encrypted: " + c);

[Link]("Decrypted: " + run(c, -1));

}
Exact Output

Use this input:

Enter key: MONARCHY

Enter plaintext: INSTRUMENTS

Encrypted: GATLMZCLRQXA

Decrypted: INSTRUMENTSZ

Cipher Key Main concept

Caesar Number Shift letters

Playfair Word 5×5 matrix + letter pairs

Hill Matrix Matrix multiplication

Vigenère Word Repeated-key shifting

You might also like