Tutorial One Time Pad (Vernam Cipher) Algorithm
Hello Vaultrarians!
Today we'll learn more about the One Time Pad algorithm is also known as Vernam Cipher. But, what is it?
The OTP is a method of encrypting alphabetic plain text. It is one of the Substitution techniques which converts plain text into cipher-text (decrypted word). In this idea, we assign a number to each character of the Plain-Text.
The assignment is as follows:
In this algorithm, the length of the keyword should be equal to that of plain text.
Examples:
Input: Message = VAULTREE, Keyword = AXDHCGQK
Output: Cipher VXXSVXUO, Message VAULTREE
Explanation:
Part 1: Plain text to Ciphertext
Plain text V A U L T R E E 21 0 20 11 19 17 4 4
Key A X D H C G Q K 0 23 3 7 2 6 16 10
Plain text + keyword = 21 23 23 18 21 23 20 14
Cipher Text V X X S V X U O
Part 2: Ciphertext to Message
Cipher Text V X X S V X U O 21 23 23 18 21 23 20 14
Key A X D H C G Q K 0 23 3 7 2 6 16 10
Cipher text - key = 21 0 20 11 19 17 4 4 Message V A U L T R E E
Basically, the steps for encrypting are:
1- Assign a number to each character of the plain-text and the keyword according to alphabetical order.
2- Add ( + ) both the number (Corresponding plain-text character number and keyword character number).
3- Subtract ( - ) the number from 26 if the added number is greater than 26, if it isnt then leave it.
Remember, the way to decrypt is applying the reverse process of encryption, which is CT - KW = PT. (cipher-text - keyword = plain-text).
Below is the implementation of the OTP algorithm:
`
public class OtpByVaultree {// Method 1// Returning encrypted textpublic 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 textpublic 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 methodpublic static void main(String[] args){ // Declaring plain text String plainText = "VAULTREE"; // Declaring key String key = "AXDHCGQK"; // 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()));}}
`
With this algorithm you will be able to decrypt messages using the OTP method. Have fun!
-
Wanna learn more about cryptography, cybersecurity and data privacy?
Follow us: https://www.vaultree.com/community/
Original Link: https://dev.to/vaultree/tutorial-one-time-pad-vernam-cipher-algorithm-1e08
Dev To
An online community for sharing and discovering great ideas, having debates, and making friendsMore About this Source Visit Dev To