# 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 classes``import` `java.io.*;` `// Main class``public` `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