Java Program to Implement the One Time Pad Algorithm

• Difficulty Level : Medium
• Last Updated : 20 Dec, 2021

One Time Pad algorithm is also known as Vernam Cipher. It is a method of encrypting alphabetic plain text. It is one of the Substitution techniques which converts plain text into ciphertext. In this mechanism, we assign a number to each character of the Plain-Text.

The assignment is as follows:

The relation between the key and plain text: In this algorithm, the length of the key should be equal to that of plain text.

Illustrations:

Input:  plain text - HELLO
Key - MONEY
Output: Cipher - TSYPM
Message - HELLO
Input:  plain text - SAVE
Key - LIFE
Output: Cipher - DIAI
Message - SAVE

Outputs explanation:

Part 1: Plain text to ciphertext

Plain text — H E L L O → 7 4 11 11 14
Key — M O N E Y → 12 14 13 4 24
Plain text + key → 19 18 24 15 38
→ 19 18 24 15 12 (=38 – 26)

Cipher Text → T S Y P M

Part 2: Ciphertext to Message

Cipher Text — T S Y P M → 19 18 24 15 12
Key — M O N E Y→ 12 14 13 4 24
Cipher text - key → 7 4 11 11 -12
→ 7 4 11 11 14

Message → H E L L O

Example

Java

 // Java program Implementing One Time Pad Algorithm // Importing required classesimport java.io.*; // Main classpublic class GFG {     // Method 1    // Returning encrypted text    public static String stringEncryption(String text,                                          String key)    {         // Initializing cipherText        String cipherText = "";         // Initialize cipher array of key length        // which stores the sum of corresponding no.'s        // of plainText and key.        int cipher[] = new int[key.length()];         for (int i = 0; i < key.length(); i++) {            cipher[i] = text.charAt(i) - 'A' + key.charAt(i)                        - 'A';        }         // If the sum is greater than 25 subtract 26 from it        //  and store that resulting value        for (int i = 0; i < key.length(); i++) {            if (cipher[i] > 25) {                cipher[i] = cipher[i] - 26;            }        }         // Converting the no.'s into integers         // Convert these integers to corresponding        // characters and add them up to cipherText        for (int i = 0; i < key.length(); i++) {            int x = cipher[i] + 'A';            cipherText += (char)x;        }         // Returning the cipherText        return cipherText;    }     // Method 2    // Returning plain text    public static String stringDecryption(String s,                                          String key)    {        // Initializing plain text        String plainText = "";         // Initializing integer array of key length        // which stores difference of corresponding no.'s of        // each character of cipherText and key        int plain[] = new int[key.length()];         // Running for loop for each character        // subtracting and storing in the array        for (int i = 0; i < key.length(); i++) {            plain[i]                = s.charAt(i) - 'A' - (key.charAt(i) - 'A');        }         // If the difference is less than 0        // add 26 and store it in the array.        for (int i = 0; i < key.length(); i++) {            if (plain[i] < 0) {                plain[i] = plain[i] + 26;            }        }         // Converting int to corresponding char        // add them up to plainText        for (int i = 0; i < key.length(); i++) {            int x = plain[i] + 'A';            plainText += (char)x;        }         // Returning plainText        return plainText;    }     // Method 3    // Main driver method    public static void main(String[] args)    {        // Declaring plain text        String plainText = "Hello";         // Declaring key        String key = "MONEY";         // Converting plain text to toUpperCase        // function call to stringEncryption        // with plainText and key as parameters        String encryptedText = stringEncryption(            plainText.toUpperCase(), key.toUpperCase());         // Printing cipher Text        System.out.println("Cipher Text - "                           + encryptedText);         // Calling above method to stringDecryption        // with encryptedText and key as parameters        System.out.println(            "Message - "            + stringDecryption(encryptedText,                               key.toUpperCase()));    }}
Output
Cipher Text - TSYPM
Message - HELLO

My Personal Notes arrow_drop_up