Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

Cns Lab Manual IV-i Sem (A.y 2021-2022)

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 39

MALLA REDDY

Institute of Engineering & Technology


(Sponsored by Malla Reddy Educational Society)
NBA Accredited, Affiliated to JNTU, Hyderabad
Maisammaguda, Dhulapally (post via Hakimpet), Sec’Bad-500 014.
Phone: 040-65969674, Cell: 9348161223

DEPARTMENT
OF
COMPUTER SCIENCE AND ENGINEERING

LABORATORY MANUAL

CRYPTOGRAPHY & NETWORK SECURITY

LAB MANUAL (R18)

YEAR 2021-2022

LAB MANUAL

CRYPTOGRAPHY & NETWORK SECURITY


Department of Computer Science and Engineering

Compiled by

Mrs Kande Archana Authorized by


Date of Issue (Asst.Professor)
Document No:
5th SEPT 2021
MRIET/CSE/LAB HOD(CSE)
Verified by
MANUAL/DS Date of
Dr. Kiran Kumar &
Revision
VERSION 1 (Dean of Academics) PRINCIPAL
26th JAN 2022
Professor

CRYPTOGRAPHY & NETWORK SECURITY LAB


IV B Tech I-Sem A.Y: 2021-2022

Prerequisites: A Course on “Programming for problem solving”.

Course Objectives:
 It covers various concepts of C programming language
 It introduces searching and sorting algorithms
 It provides an understanding of data structures such as stacks and queues.

Course Outcomes:
 Ability to develop C programs for computing and real-life applications using basic elements like
control statements, arrays, functions, pointers and strings, and data structures like stacks, queues
and linked lists.
 Ability to Implement searching and sorting algorithms

LIST OF EXPERIMENTS
1. Write a C program that contains a string (char pointer) with a value \Hello World’. The
program should XOR each character in this string with 0 and display the result.
2. Write a C program that contains a string (char pointer) with a value \Hello World’. The
program should AND or and XOR each character in this string with 127 and display
the result.
3. Write a Java program to perform encryption and decryption using the following algorithms:
i)Ceaser Cipher ii)Substitution Cipher iii)Hill Cipher

4. Write a Java program to implement the DES algorithm logic

5. Write a C/JAVA program to implement the BlowFish algorithm logic.

6. Write a C/JAVA program to implement the Rijndael algorithm logic.

7. Write a C/JAVA program to implement the RC4 logic in Java.

8. Write a Java program to implement RSA Algoithm

9. Implement the Diffie-Hellman Key Exchange mechanism using HTML and JavaScript.
Consider the end user as one of the parties (Alice) and the JavaScript application as other
party (bob).

10. Calculate the message digest of a text using the SHA-1 algorithm in JAVA

11. Calculate the message digest of a text using the MD5 algorithm in JAVA

TEXTBOOKS:
1. Fundamentals of Data Structures in C, 2nd Edition, E. Horowitz, S. Sahni and Susan Anderson
Freed, Universities Press.

1. Data Structures using C – A. S. Tanenbaum, Y. Langsam, and M. J. Augenstein,


PHI/Pearson Education.

REFERENCE:
1. Data Structures: A Pseudocode Approach with C, 2nd Edition, R. F. Gilberg and B. A.
Forouzan, Cengage Learning.

INDEX
Experiment No. Name of the Experiment Page No.

Write a C program that contains a string (char


pointer) with a value \Hello World’. The program
Experiment 1 should XOR each character in this string with 0 01
and display the result.

Write a C program that contains a string (char


pointer) with a value \Hello World’. The program
Experiment 2 should AND or and XOR each character in this 07-15
string with 127 and display the result.

Write a Java program to perform encryption and


decryption using the following algorithms:
Experiment 3 i)Ceaser Cipher ii)Substitution Cipher iii)Hill
16-20
Cipher

Write a Java program to implement the DES


Experiment 4 algorithm logic 21-29

Write a C/JAVA program to implement the


Experiment 5 BlowFish algorithm logic 30-38

Write a C/JAVA program to implement the


Experiment 6 Rijndael algorithm logic. 39-48

Write a C/JAVA program to implement the RC4


Experiment 7 logic in Java. 49-58

Write a Java program to implement RSA


Experiment 8 Algoithm
59-65

Implement the Diffie-Hellman Key Exchange


mechanism using HTML and JavaScript.
Experiment 9 Consider the end user as one of the parties
66-80
(Alice) and the JavaScript application as other
party (bob).

Calculate the message digest of a text using


Experiment 10 the SHA-1 algorithm in JAVA 66-80

Calculate the message digest of a text using


Experiment 11 the MD5 algorithm in JAVA 66-80

1.
2.
3.
4.
5.
6.
7.
8.

1. XOR a string with a Zero

AIM: Write a C program that contains a string (char pointer) with a value \Hello World’.
The program should XOR each character in this string with 0 and display the result.

Source Code:

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

void main()

char str[] = "Hello World";

char str1[11];

int i, len;

len = strlen(str);

for (i = 0; i < len; i++)

str1[i] = str[i] ^ 0;

printf("%c", str1[i]);

printf("\n");

Output:

Hello World

Hello World
2. XOR a string with a 127

AIM: Write a C program that contains a string (char pointer) with a


value \Hello World’. The program should AND or and XOR each
character in this string with 127 and display the result.

Source Code:

void main(){

char str[]="Hello World";

int i,len;

len = strlen(str);

for(i=0;i<len;i++){

printf("%c",str[i]&127);

printf("\n");

for(int i=0;i<len;i++){

printf("%c",str[i]^127);

printf("\n");

for(int i=0;i<len;i++){

printf("%c",str[i]|127);

printf("\n");

Output:
Hello World

Hello World

Hello World

3. ENCRYPTION & DECRYPTION USING CIPHER ALGORITHMS

AIM: Write a Java program to perform encryption and decryption using the following
algorithms:

i) Ceaser Cipher
ii) Substitution Cipher
iii) Hill Cipher

i) Ceaser Cipher: Source Code

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.util.Scanner;

public class CeaserCipher {

static Scanner sc=new Scanner(System.in);

static BufferedReader br = new BufferedReader(new


InputStreamReader(System.in));

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

System.out.print("Enter any String: ");

String str = br.readLine();

System.out.print("Enter the Key: ");

int key = sc.nextInt();

String encrypted = encrypt(str, key);

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


String decrypted = decrypt(encrypted, key);

System.out.println("Decrypted String is: " +decrypted);

public static String encrypt(String str, int key) {

String encrypted = "";

for (int i = 0; i < str.length(); i++) {

int c = str.charAt(i);

if (Character.isUpperCase(c)) {

c = c + (key % 26);

if (c > 'Z')

c = c - 26;

else if (Character.isLowerCase(c)) {

c = c + (key % 26);

if (c > 'z')

c = c - 26;

encrypted += (char) c;

return encrypted;

public static String decrypt(String str, int key) {

String decrypted = "";

for(int i = 0; i < str.length(); i++) {

int c = str.charAt(i);
if (Character.isUpperCase(c)) {

c = c - (key % 26);

if (c < 'A')

c = c + 26;

else if (Character.isLowerCase(c)) {

c = c - (key % 26);

if (c < 'a')

c = c + 26;

decrypted += (char) c;

return decrypted;

Output:

Enter any String: Are you feeling better now

Enter the Key: 8

Encrypted String is: Izm gwc nmmtqvo jmbbmz vwe

Decrypted String is: Are you feeling better now


3. ENCRYPTION & DECRYPTION USING CIPHER ALGORITHMS

AIM: Write a Java program to perform encryption and decryption using the following
algorithms:

i) Ceaser Cipher
ii) Substitution Cipher
iii) Hill Cipher

ii) Substitution Cipher: Source Code

import java.io.*;

import java.util.*;

public class SubstitutionCipher {

static Scanner sc = new Scanner(System.in);

static BufferedReader br = new BufferedReader(new


InputStreamReader(System.in));

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

String a = "abcdefghijklmnopqrstuvwxyz";

String b = "zyxwvutsrqponmlkjihgfedcba";

System.out.print("Enter any string: ");

String str = br.readLine();

String decrypt = "";

char c;

for (int i = 0; i < str.length(); i++) {

c = str.charAt(i);

int j = a.indexOf(c);
decrypt = decrypt + b.charAt(j);

System.out.println("The encrypted data is: " +decrypt);

Output:

Enter any string : aceho

The encrypted data is: zxvsl


3. ENCRYPTION & DECRYPTION USING CIPHER ALGORITHMS

AIM: Write a Java program to perform encryption and decryption using the following
algorithms:

i) Ceaser Cipher
ii) Substitution Cipher
iii) Hill Cipher

iii) Hill Cipher: Source Code

// Java code to implement Hill Cipher

public class Hill


{

// Following function generates the


// key matrix for the key string

public static void getKeyMatrix(String key, int keyMatrix[][])


{

int k = 0;

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

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

keyMatrix[i][j] = (key.charAt(k)) % 65;

k++;

}
}
// Following function encrypts the message

public static void encrypt(int cipherMatrix[][],

int keyMatrix[][],

int messageVector[][])
{

int x, i, j;

for (i = 0; i < 3; i++)

for (j = 0; j < 1; j++)

cipherMatrix[i][j] = 0;

for (x = 0; x < 3; x++)

cipherMatrix[i][j] +=

keyMatrix[i][x] * messageVector[x][j];

cipherMatrix[i][j] = cipherMatrix[i][j] % 26;

}
}

// Function to implement Hill Cipher

public static void HillCipher(String message, String key)


{
// Get key matrix from the key string

int [][]keyMatrix = new int[3][3];

getKeyMatrix(key, keyMatrix);

int [][]messageVector = new int[3][1];

// Generate vector for the message

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

messageVector[i][0] = (message.charAt(i)) % 65;

int [][]cipherMatrix = new int[3][1];

// Following function generates

// the encrypted vector

encrypt(cipherMatrix, keyMatrix, messageVector);

String CipherText="";

// Generate the encrypted text from

// the encrypted vector

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

CipherText += (char)(cipherMatrix[i][0] + 65);

// Finally print the ciphertext

System.out.print(" Ciphertext:" + CipherText);


}

// Driver code

public static void main(String[] args)


{
// Get the message to be encrypted
String message = "ACT";

// Get the key

String key = "GYBNQKURP";


HillCipher(message, key);

}
}

Output:

Ciphertext: POH
4. JAVA PROGRAM FOR DES ALGORITHM LOGIC

AIM: Write a Java program to implement the DES algorithm logic

Source Code:

import java.util.*;
 
class Main {
    private static class DES {
        // CONSTANTS
        // Initial Permutation Table
        int[] IP = { 58, 50, 42, 34, 26, 18,
                     10, 2, 60, 52, 44, 36, 28, 20,
                     12, 4, 62, 54, 46, 38,
                     30, 22, 14, 6, 64, 56,
                     48, 40, 32, 24, 16, 8,
                     57, 49, 41, 33, 25, 17,
                     9, 1, 59, 51, 43, 35, 27,
                     19, 11, 3, 61, 53, 45,
                     37, 29, 21, 13, 5, 63, 55,
                     47, 39, 31, 23, 15, 7 };
 
        // Inverse Initial Permutation Table
        int[] IP1 = { 40, 8, 48, 16, 56, 24, 64,
                      32, 39, 7, 47, 15, 55,
                      23, 63, 31, 38, 6, 46,
                      14, 54, 22, 62, 30, 37,
                      5, 45, 13, 53, 21, 61,
                      29, 36, 4, 44, 12, 52,
                      20, 60, 28, 35, 3, 43,
                      11, 51, 19, 59, 27, 34,
                      2, 42, 10, 50, 18, 58,
                      26, 33, 1, 41, 9, 49,
                      17, 57, 25 };
 
        // first key-hePermutation Table
        int[] PC1 = { 57, 49, 41, 33, 25,
                      17, 9, 1, 58, 50, 42, 34, 26,
                      18, 10, 2, 59, 51, 43, 35, 27,
                      19, 11, 3, 60, 52, 44, 36, 63,
                      55, 47, 39, 31, 23, 15, 7, 62,
                      54, 46, 38, 30, 22, 14, 6, 61,
                      53, 45, 37, 29, 21, 13, 5, 28,
                      20, 12, 4 };
 
        // second key-Permutation Table
        int[] PC2 = { 14, 17, 11, 24, 1, 5, 3,
                      28, 15, 6, 21, 10, 23, 19, 12,
                      4, 26, 8, 16, 7, 27, 20, 13, 2,
                      41, 52, 31, 37, 47, 55, 30, 40,
                      51, 45, 33, 48, 44, 49, 39, 56,
                      34, 53, 46, 42, 50, 36, 29, 32 };
 
        // Expansion D-box Table
        int[] EP = { 32, 1, 2, 3, 4, 5, 4,
                     5, 6, 7, 8, 9, 8, 9, 10,
                     11, 12, 13, 12, 13, 14, 15,
                     16, 17, 16, 17, 18, 19, 20,
                     21, 20, 21, 22, 23, 24, 25,
                     24, 25, 26, 27, 28, 29, 28,
                     29, 30, 31, 32, 1 };
 
        // Straight Permutation Table
        int[] P = { 16, 7, 20, 21, 29, 12, 28,
                    17, 1, 15, 23, 26, 5, 18,
                    31, 10, 2, 8, 24, 14, 32,
                    27, 3, 9, 19, 13, 30, 6,
                    22, 11, 4, 25 };
 
        // S-box Table
        int[][][] sbox = {
            { { 14, 4, 13, 1, 2, 15, 11, 8, 3, 10, 6, 12, 5, 9, 0, 7 },
              { 0, 15, 7, 4, 14, 2, 13, 1, 10, 6, 12, 11, 9, 5, 3, 8 },
              { 4, 1, 14, 8, 13, 6, 2, 11, 15, 12, 9, 7, 3, 10, 5, 0 },
              { 15, 12, 8, 2, 4, 9, 1, 7, 5, 11, 3, 14, 10, 0, 6, 13 } },
 
            { { 15, 1, 8, 14, 6, 11, 3, 4, 9, 7, 2, 13, 12, 0, 5, 10 },
              { 3, 13, 4, 7, 15, 2, 8, 14, 12, 0, 1, 10, 6, 9, 11, 5 },
              { 0, 14, 7, 11, 10, 4, 13, 1, 5, 8, 12, 6, 9, 3, 2, 15 },
              { 13, 8, 10, 1, 3, 15, 4, 2, 11, 6, 7, 12, 0, 5, 14, 9 } },
            { { 10, 0, 9, 14, 6, 3, 15, 5, 1, 13, 12, 7, 11, 4, 2, 8 },
              { 13, 7, 0, 9, 3, 4, 6, 10, 2, 8, 5, 14, 12, 11, 15, 1 },
              { 13, 6, 4, 9, 8, 15, 3, 0, 11, 1, 2, 12, 5, 10, 14, 7 },
              { 1, 10, 13, 0, 6, 9, 8, 7, 4, 15, 14, 3, 11, 5, 2, 12 } },
            { { 7, 13, 14, 3, 0, 6, 9, 10, 1, 2, 8, 5, 11, 12, 4, 15 },
              { 13, 8, 11, 5, 6, 15, 0, 3, 4, 7, 2, 12, 1, 10, 14, 9 },
              { 10, 6, 9, 0, 12, 11, 7, 13, 15, 1, 3, 14, 5, 2, 8, 4 },
              { 3, 15, 0, 6, 10, 1, 13, 8, 9, 4, 5, 11, 12, 7, 2, 14 } },
            { { 2, 12, 4, 1, 7, 10, 11, 6, 8, 5, 3, 15, 13, 0, 14, 9 },
              { 14, 11, 2, 12, 4, 7, 13, 1, 5, 0, 15, 10, 3, 9, 8, 6 },
              { 4, 2, 1, 11, 10, 13, 7, 8, 15, 9, 12, 5, 6, 3, 0, 14 },
              { 11, 8, 12, 7, 1, 14, 2, 13, 6, 15, 0, 9, 10, 4, 5, 3 } },
            { { 12, 1, 10, 15, 9, 2, 6, 8, 0, 13, 3, 4, 14, 7, 5, 11 },
              { 10, 15, 4, 2, 7, 12, 9, 5, 6, 1, 13, 14, 0, 11, 3, 8 },
              { 9, 14, 15, 5, 2, 8, 12, 3, 7, 0, 4, 10, 1, 13, 11, 6 },
              { 4, 3, 2, 12, 9, 5, 15, 10, 11, 14, 1, 7, 6, 0, 8, 13 } },
            { { 4, 11, 2, 14, 15, 0, 8, 13, 3, 12, 9, 7, 5, 10, 6, 1 },
              { 13, 0, 11, 7, 4, 9, 1, 10, 14, 3, 5, 12, 2, 15, 8, 6 },
              { 1, 4, 11, 13, 12, 3, 7, 14, 10, 15, 6, 8, 0, 5, 9, 2 },
              { 6, 11, 13, 8, 1, 4, 10, 7, 9, 5, 0, 15, 14, 2, 3, 12 } },
            { { 13, 2, 8, 4, 6, 15, 11, 1, 10, 9, 3, 14, 5, 0, 12, 7 },
              { 1, 15, 13, 8, 10, 3, 7, 4, 12, 5, 6, 11, 0, 14, 9, 2 },
              { 7, 11, 4, 1, 9, 12, 14, 2, 0, 6, 10, 13, 15, 3, 5, 8 },
              { 2, 1, 14, 7, 4, 10, 8, 13, 15, 12, 9, 0, 3, 5, 6, 11 } }
        };
        int[] shiftBits = { 1, 1, 2, 2, 2, 2, 2, 2,
                            1, 2, 2, 2, 2, 2, 2, 1 };
 
        // hexadecimal to binary conversion
        String hextoBin(String input)
        {
            int n = input.length() * 4;
            input = Long.toBinaryString(
                Long.parseUnsignedLong(input, 16));
            while (input.length() < n)
                input = "0" + input;
            return input;
        }
 
        // binary to hexadecimal conversion
        String binToHex(String input)
        {
            int n = (int)input.length() / 4;
            input = Long.toHexString(
                Long.parseUnsignedLong(input, 2));
            while (input.length() < n)
                input = "0" + input;
            return input;
        }
 
        // per-mutate input hexadecimal
        // according to specified sequence
        String permutation(int[] sequence, String input)
        {
            String output = "";
            input = hextoBin(input);
            for (int i = 0; i < sequence.length; i++)
                output += input.charAt(sequence[i] - 1);
            output = binToHex(output);
            return output;
        }
 
        // xor 2 hexadecimal strings
        String xor(String a, String b)
        {
            // hexadecimal to decimal(base 10)
            long t_a = Long.parseUnsignedLong(a, 16);
            // hexadecimal to decimal(base 10)
            long t_b = Long.parseUnsignedLong(b, 16);
            // xor
            t_a = t_a ^ t_b;
            // decimal to hexadecimal
            a = Long.toHexString(t_a);
            // prepend 0's to maintain length
            while (a.length() < b.length())
                a = "0" + a;
            return a;
        }
 
        // left Circular Shifting bits
        String leftCircularShift(String input, int numBits)
        {
            int n = input.length() * 4;
            int perm[] = new int[n];
            for (int i = 0; i < n - 1; i++)
                perm[i] = (i + 2);
            perm[n - 1] = 1;
            while (numBits-- > 0)
                input = permutation(perm, input);
            return input;
        }
 
        // preparing 16 keys for 16 rounds
        String[] getKeys(String key)
        {
            String keys[] = new String[16];
            // first key permutation
            key = permutation(PC1, key);
            for (int i = 0; i < 16; i++) {
                key = leftCircularShift(
                          key.substring(0, 7), shiftBits[i])
                      + leftCircularShift(key.substring(7, 14),
                                          shiftBits[i]);
                // second key permutation
                keys[i] = permutation(PC2, key);
            }
            return keys;
        }
 
        // s-box lookup
        String sBox(String input)
        {
            String output = "";
            input = hextoBin(input);
            for (int i = 0; i < 48; i += 6) {
                String temp = input.substring(i, i + 6);
                int num = i / 6;
                int row = Integer.parseInt(
                    temp.charAt(0) + "" + temp.charAt(5), 2);
                int col = Integer.parseInt(
                    temp.substring(1, 5), 2);
                output += Integer.toHexString(
                    sbox[num][row][col]);
            }
            return output;
        }
 
        String round(String input, String key, int num)
        {
            // fk
            String left = input.substring(0, 8);
            String temp = input.substring(8, 16);
            String right = temp;
            // Expansion permutation
            temp = permutation(EP, temp);
            // xor temp and round key
            temp = xor(temp, key);
            // lookup in s-box table
            temp = sBox(temp);
            // Straight D-box
            temp = permutation(P, temp);
            // xor
            left = xor(left, temp);
            System.out.println("Round "
                               + (num + 1) + " "
                               + right.toUpperCase()
                               + " " + left.toUpperCase() + " "
                               + key.toUpperCase());
 
            // swapper
            return right + left;
        }
 
        String encrypt(String plainText, String key)
        {
            int i;
            // get round keys
            String keys[] = getKeys(key);
 
            // initial permutation
            plainText = permutation(IP, plainText);
            System.out.println(
                "After initial permutation: "
                + plainText.toUpperCase());
            System.out.println(
                "After splitting: L0="
                + plainText.substring(0, 8).toUpperCase()
                + " R0="
                + plainText.substring(8, 16).toUpperCase() + "\n");
 
            // 16 rounds
            for (i = 0; i < 16; i++) {
                plainText = round(plainText, keys[i], i);
            }
 
            // 32-bit swap
            plainText = plainText.substring(8, 16)
                        + plainText.substring(0, 8);
 
            // final permutation
            plainText = permutation(IP1, plainText);
            return plainText;
        }
 
        String decrypt(String plainText, String key)
        {
            int i;
            // get round keys
            String keys[] = getKeys(key);
 
            // initial permutation
            plainText = permutation(IP, plainText);
            System.out.println(
                "After initial permutation: "
                + plainText.toUpperCase());
            System.out.println(
                "After splitting: L0="
                + plainText.substring(0, 8).toUpperCase()
                + " R0=" + plainText.substring(8, 16).toUpperCase()
                + "\n");
 
            // 16-rounds
            for (i = 15; i > -1; i--) {
                plainText = round(plainText, keys[i], 15 - i);
            }
 
            // 32-bit swap
            plainText = plainText.substring(8, 16)
                        + plainText.substring(0, 8);
            plainText = permutation(IP1, plainText);
            return plainText;
        }
    }
    public static void main(String args[])
    {
        String text = "123456ABCD132536";
        String key = "AABB09182736CCDD";
 
        DES cipher = new DES();
        System.out.println("Encryption:\n");
        text = cipher.encrypt(text, key);
        System.out.println(
            "\nCipher Text: " + text.toUpperCase() + "\n");
        System.out.println("Decryption\n");
        text = cipher.decrypt(text, key);
        System.out.println(
            "\nPlain Text: "
            + text.toUpperCase());
    }
}

Output: Encryption

After initial permutation: 14A7D67818CA18AD


After splitting: L0=14A7D678 R0=18CA18AD

Round 1 18CA18AD 5A78E394 194CD072DE8C


Round 2 5A78E394 4A1210F6 4568581ABCCE
Round 3 4A1210F6 B8089591 06EDA4ACF5B5
Round 4 B8089591 236779C2 DA2D032B6EE3
Round 5 236779C2 A15A4B87 69A629FEC913
Round 6 A15A4B87 2E8F9C65 C1948E87475E
Round 7 2E8F9C65 A9FC20A3 708AD2DDB3C0
Round 8 A9FC20A3 308BEE97 34F822F0C66D
Round 9 308BEE97 10AF9D37 84BB4473DCCC
Round 10 10AF9D37 6CA6CB20 02765708B5BF
Round 11 6CA6CB20 FF3C485F 6D5560AF7CA5
Round 12 FF3C485F 22A5963B C2C1E96A4BF3
Round 13 22A5963B 387CCDAA 99C31397C91F
Round 14 387CCDAA BD2DD2AB 251B8BC717D0
Round 15 BD2DD2AB CF26B472 3330C5D9A36D
Round 16 19BA9212 CF26B472 181C5D75C66D

Cipher Text: C0B7A8D05F3A829C

Output: Decryption

After initial permutation: 19BA9212CF26B472


After splitting: L0=19BA9212 R0=CF26B472

Round 1 CF26B472 BD2DD2AB 181C5D75C66D


Round 2 BD2DD2AB 387CCDAA 3330C5D9A36D
Round 3 387CCDAA 22A5963B 251B8BC717D0
Round 4 22A5963B FF3C485F 99C31397C91F
Round 5 FF3C485F 6CA6CB20 C2C1E96A4BF3
Round 6 6CA6CB20 10AF9D37 6D5560AF7CA5
Round 7 10AF9D37 308BEE97 02765708B5BF
Round 8 308BEE97 A9FC20A3 84BB4473DCCC
Round 9 A9FC20A3 2E8F9C65 34F822F0C66D
Round 10 2E8F9C65 A15A4B87 708AD2DDB3C0
Round 11 A15A4B87 236779C2 C1948E87475E
Round 12 236779C2 B8089591 69A629FEC913
Round 13 B8089591 4A1210F6 DA2D032B6EE3
Round 14 4A1210F6 5A78E394 06EDA4ACF5B5
Round 15 5A78E394 18CA18AD 4568581ABCCE
Round 16 14A7D678 18CA18AD 194CD072DE8C
Plain Text: 123456ABCD132536

5. PROGRAM TO IMPLEMENT BLOWFISH ALGORITHM LOGIC

AIM: Write a C/JAVA program to implement the BlowFish algorithm logic.

Source Code:

import javax.crypto.Cipher;

import javax.crypto.KeyGenerator;

import javax.crypto.SecretKey;

import javax.swing.JOptionPane;

public class BlowFishCipher {

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

// create a key generator based upon the Blowfish cipher

KeyGenerator keygenerator = KeyGenerator.getInstance("Blowfish");

// create a key

SecretKey secretkey = keygenerator.generateKey();

// create a cipher based upon Blowfish

Cipher cipher = Cipher.getInstance("Blowfish");

// initialise cipher to with secret key

cipher.init(Cipher.ENCRYPT_MODE, secretkey);

// get the text to encrypt

String inputText = JOptionPane.showInputDialog("Input your message: ");

// encrypt message

byte[] encrypted = cipher.doFinal(inputText.getBytes());

// re-initialise the cipher to be in decrypt mode


cipher.init(Cipher.DECRYPT_MODE, secretkey);

// decrypt message

byte[] decrypted = cipher.doFinal(encrypted);

// and display the results

JOptionPane.showMessageDialog(JOptionPane.getRootFrame(),

"\nEncrypted text: " + new String(encrypted) + "\n" +

"\nDecrypted text: " + new String(decrypted));

System.exit(0);

Output:

Input your message: Hello world

Encrypted text: 3ooo&&(*&*4r4

Decrypted text: Hello world


6. PROGRAM TO IMPLEMENT RIJNDAEL ALGORITHM LOGIC

AIM: Write a C/JAVA program to implement the Rijndael algorithm logic.

Source Code:

import java.security.*;

import javax.crypto.*;

import javax.crypto.spec.*;

import java.io.*;

Public class AES {

public static String asHex (byte buf[]) {

StringBuffer strbuf = new StringBuffer(buf.length * 2);

int i;

for (i = 0; i < buf.length; i++) {

if (((int) buf[i] & 0xff) < 0x10)

strbuf.append("0");

strbuf.append(Long.toString((int) buf[i] & 0xff, 16)); }

return strbuf.toString(); }

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

String message="AES still rocks!!";

// Get the KeyGenerator

KeyGenerator kgen = KeyGenerator.getInstance("AES");

kgen.init(128); // 192 and 256 bits may not be available

// Generate the secret key specs.


SecretKey skey = kgen.generateKey();

byte[] raw = skey.getEncoded();

SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");

// Instantiate the cipher

Cipher cipher = Cipher.getInstance("AES");

cipher.init(Cipher.ENCRYPT_MODE, skeySpec);

byte[] encrypted = cipher.doFinal((args.length == 0 ? message :

args[0]).getBytes());

System.out.println("encrypted string: " + asHex(encrypted));

cipher.init(Cipher.DECRYPT_MODE, skeySpec);

byte[] original = cipher.doFinal(encrypted);

String originalString=new String(original);

System.out.println("Original string: " + originalString + " " + asHex(original));

Output:

Enter the string: Welcome

String To Encrypt: Welcome

Encrypted Value: BPQGHKIoMNMwc0wKvg=


7. RC4 LOGIC

AIM: Write the RC4 logic in Java.

PROGRAM: Encrypt a string using BlowFish algorithm

AIM: Using Java Cryptography, encrypt the text “Hello world” using BlowFish. Create
your own key using Java keytool.

Source Code:

import javax.crypto.Cipher;

import javax.crypto.KeyGenerator;

import javax.crypto.SecretKey;

import javax.swing.JOptionPane;

public class BlowFishCipher {

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

// create a key generator based upon the Blowfish cipher

KeyGenerator keygenerator = KeyGenerator.getInstance("Blowfish");

// create a key

SecretKey secretkey = keygenerator.generateKey();

// create a cipher based upon Blowfish

Cipher cipher = Cipher.getInstance("Blowfish");

// initialise cipher to with secret key

cipher.init(Cipher.ENCRYPT_MODE, secretkey);

// get the text to encrypt

String inputText = JOptionPane.showInputDialog("Input your message: ");

// encrypt message
byte[] encrypted = cipher.doFinal(inputText.getBytes());

// re-initialise the cipher to be in decrypt mode

cipher.init(Cipher.DECRYPT_MODE, secretkey);

// decrypt message

byte[] decrypted = cipher.doFinal(encrypted);

// and display the results

JOptionPane.showMessageDialog(JOptionPane.getRootFrame(),

"\nEncrypted text: " + new String(encrypted) + "\n" +

"\nDecrypted text: " + new String(decrypted));

System.exit(0);

Output:

Input your message: Hello world

Encrypted text: 3ooo&&(*&*4r4

Decrypted text: Hello world


8. RSA ALGORITHM

AIM: Write a Java program to implement RSA Algoithm.

Description:

RSA Algorithm is used to encrypt and decrypt data in modern computer systems and
other electronic devices. RSA algorithm is an asymmetric cryptographic algorithm as it
creates 2 different keys for the purpose of encryption and decryption. ... RSA makes use
of prime numbers (arbitrary large numbers) to function.

Source Code:

import java.util.*;

public class RSA {

public static void main(String args[]) {

Scanner sc=new Scanner(System.in);

int d=0,e,i;

double c,msg;

System.out.println("Enter the numbered message: ");

int m=sc.nextInt();

System.out.println("Enter two prime numbers: ");

int p=sc.nextInt();

int q=sc.nextInt();

int n=p*q;

int phi=(p-1)*(q-1);

System.out.println("the value of totent function = "+phi);

for(e=2;e<phi;e++) {

if(gcd(e,phi)==1)
break;

System.out.println("The value of e = "+e);

for(i=1;i<phi;i++) {

if((e*i)%phi == 1) {

d=i;

break;

System.out.println("The value of d = "+d);

c=(Math.pow(m,e))%n;

System.out.println("Encrypted message is: ");

System.out.println(c);

msg=(Math.pow(c,d))%n;

System.out.println("Derypted message is: ");

System.out.println(msg);

static int gcd(int a,int b) {

if(a%b == 0)

return b;

else

return gcd(b,a%b);

}
Output:

Enter the numbered message: 2

Enter two prime numbers: 7 11

the value of totent function = 60

The value of e = 7

The value of d = 43

Encrypted message is: 51.0

Derypted message is: 12.0


9. DIFFIE-HELLMAN

AIM: Implement the Diffie-Hellman Key Exchange mechanism using HTML and
JavaScript. Consider the end user as one of the parties (Alice) and the
JavaScript application as other party (bob).

Description:

The Diffie-Hellmann key exchange is a secure method for exchanging cryptographic


keys. This method allows two parties which have no prior knowledge of each other to
establish a shared, secret key, even over an insecure channel.

Source Code:

import java.io.*;

import java.util.*;

class DiffieHellman {

public static void main(String args[]) {

Scanner s=new Scanner(System.in);

System.out.println("Enter modulo(p)");

int p=s.nextInt();

System.out.println("Enter primitive root of "+p);

int g=s.nextInt();

System.out.println("Choose 1st secret no(Alice)");

int a=s.nextInt();

System.out.println("Choose 2nd secret no(BOB)");

int b=s.nextInt();

int A = (int)Math.pow(g,a)%p;
int B = (int)Math.pow(g,b)%p;

int S_A = (int)Math.pow(B,a)%p;

int S_B =(int)Math.pow(A,b)%p;

if(S_A==S_B) {

System.out.println("ALice and Bob can communicate with each


other!!!");

System.out.println("They share a secret no = "+S_A);

else

System.out.println("ALice and Bob cannot communicate with each


other!!!");

Output:

Enter modulo(p) : 17

Enter primitive root of : 17 3

Choose 1st secret no(Alice) : 12

Choose 2nd secret no(BOB) : 14

ALice and Bob can communicate with each other!!!

They share a secret no = 16


10. SHA-1

AIM: Calculate the message digest of a text using the SHA-1 algorithm in JAVA.

Description:
SHA-1 or Secure Hash Algorithm 1 is a cryptographic hash function which takes an
input and produces a 160-bit (20-byte) hash value. This hash value is known as a
message digest. ... To calculate cryptographic hashing value in Java, Message Digest
Class is used, under the package java.security.

Source Code:

import java.util.*;

import java.io.IOException;

public class SHA {

private static Random r = new Random(9999);

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

Scanner s = new Scanner(System.in);

String st = s.nextLine();

System.out.println("Encrypted string :" + encrypt(st));

System.out.println("Decrypted string :" + decrypt(encrypt(st)));

public static String encrypt(String str) {

Base64.Encoder e = Base64.getEncoder();

byte[] s = new byte[8];

r.nextBytes(s);

return e.encodeToString(s) + e.encodeToString(str.getBytes());

public static String decrypt(String estr) {


if (estr.length() > 12) {

String c = estr.substring(12);

Base64.Decoder d = Base64.getDecoder();

return new String(d.decode(c));

return null;

}
}

Output:

Hello

Encrypted string :5OKn4ZevXxA=SGVsbG8=


Decrypted string :Hello
11. MD5

AIM: Calculate the message digest(MD5) of a text using the SHA-1 algorithm in
JAVA

Source Code:

import java.security.*;
public class MD5 {
public static void main(String[] a) {
// TODO code application logic here

try {

MessageDigest md = MessageDigest.getInstance("MD5");

System.out.println("Message digest object info: ");

System.out.println(" Algorithm = " +md.getAlgorithm());

System.out.println(" Provider = " +md.getProvider());

System.out.println(" ToString = " +md.toString());

String input = "";

md.update(input.getBytes());

byte[] output = md.digest();

System.out.println();

System.out.println("MD5(\""+input+"\") = " +bytesToHex(output));

input = "abc";

md.update(input.getBytes());

output = md.digest();

System.out.println();

System.out.println("MD5(\""+input+"\") = " +bytesToHex(output));


input = "abcdefghijklmnopqrstuvwxyz";

md.update(input.getBytes());

output = md.digest();

System.out.println();

System.out.println("MD5(\"" +input+"\") = " +bytesToHex(output));

System.out.println("");

catch (Exception e) {

System.out.println("Exception: " +e); }

public static String bytesToHex(byte[] b) {

char hexDigit[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};

StringBufferbuf = new StringBuffer();

for (int j=0; j<b.length; j++) {

buf.append(hexDigit[(b[j] >> 4) & 0x0f]);

buf.append(hexDigit[b[j] & 0x0f]); }

return buf.toString();

Output:

Message digest object info:

Algorithm = MD5

Provider = SUN version 1.6

ToString = MD5 Message Digest from SUN, <initialized>

MD5("") = D41D8CD98F00B204E9800998ECF8427E
MD5("abc") = 900150983CD24FB0D6963F7D28E17F72

MD5("abcdefghijklmnopqrstuvwxyz") = C3FCD3D76192E4007DFB496CCA67E13B

You might also like