This is a java program to implement playfair cipher algorithm. The Playfair cipher or Playfair square is a manual symmetric encryption technique and was the first literal digraph substitution cipher.
Here is the source code of the Java Program to Decode a Message Encoded Using Playfair Cipher. The Java program is successfully compiled and run on a Windows system. The program output is also shown below.
package com.maixuanviet.setandstring; import java.util.Scanner; public class PlayfairCipherDecryption { private String KeyWord = new String(); private String Key = new String(); private char matrix_arr[][] = new char[5][5]; public void setKey(String k) { String K_adjust = new String(); boolean flag = false; K_adjust = K_adjust + k.charAt(0); for (int i = 1; i < k.length(); i++) { for (int j = 0; j < K_adjust.length(); j++) { if (k.charAt(i) == K_adjust.charAt(j)) { flag = true; } } if (flag == false) K_adjust = K_adjust + k.charAt(i); flag = false; } KeyWord = K_adjust; } public void KeyGen() { boolean flag = true; char current; Key = KeyWord; for (int i = 0; i < 26; i++) { current = (char) (i + 97); if (current == 'j') continue; for (int j = 0; j < KeyWord.length(); j++) { if (current == KeyWord.charAt(j)) { flag = false; break; } } if (flag) Key = Key + current; flag = true; } System.out.println(Key); matrix(); } private void matrix() { int counter = 0; for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { matrix_arr[i][j] = Key.charAt(counter); System.out.print(matrix_arr[i][j] + " "); counter++; } System.out.println(); } } private String format(String old_text) { int i = 0; int len = 0; String text = new String(); len = old_text.length(); for (int tmp = 0; tmp < len; tmp++) { if (old_text.charAt(tmp) == 'j') { text = text + 'i'; } else text = text + old_text.charAt(tmp); } len = text.length(); for (i = 0; i < len; i = i + 2) { if (text.charAt(i + 1) == text.charAt(i)) { text = text.substring(0, i + 1) + 'x' + text.substring(i + 1); } } return text; } private String[] Divid2Pairs(String new_string) { String Original = format(new_string); int size = Original.length(); if (size % 2 != 0) { size++; Original = Original + 'x'; } String x[] = new String[size / 2]; int counter = 0; for (int i = 0; i < size / 2; i++) { x[i] = Original.substring(counter, counter + 2); counter = counter + 2; } return x; } public int[] GetDiminsions(char letter) { int[] key = new int[2]; if (letter == 'j') letter = 'i'; for (int i = 0; i < 5; i++) { for (int j = 0; j < 5; j++) { if (matrix_arr[i][j] == letter) { key[0] = i; key[1] = j; break; } } } return key; } public String encryptMessage(String Source) { String src_arr[] = Divid2Pairs(Source); String Code = new String(); char one; char two; int part1[] = new int[2]; int part2[] = new int[2]; for (int i = 0; i < src_arr.length; i++) { one = src_arr[i].charAt(0); two = src_arr[i].charAt(1); part1 = GetDiminsions(one); part2 = GetDiminsions(two); if (part1[0] == part2[0]) { if (part1[1] < 4) part1[1]++; else part1[1] = 0; if (part2[1] < 4) part2[1]++; else part2[1] = 0; } else if (part1[1] == part2[1]) { if (part1[0] < 4) part1[0]++; else part1[0] = 0; if (part2[0] < 4) part2[0]++; else part2[0] = 0; } else { int temp = part1[1]; part1[1] = part2[1]; part2[1] = temp; } Code = Code + matrix_arr[part1[0]][part1[1]] + matrix_arr[part2[0]][part2[1]]; } return Code; } public String decryptMessage(String Code) { String Original = new String(); String src_arr[] = Divid2Pairs(Code); char one; char two; int part1[] = new int[2]; int part2[] = new int[2]; for (int i = 0; i < src_arr.length; i++) { one = src_arr[i].charAt(0); two = src_arr[i].charAt(1); part1 = GetDiminsions(one); part2 = GetDiminsions(two); if (part1[0] == part2[0]) { if (part1[1] > 0) part1[1]--; else part1[1] = 4; if (part2[1] > 0) part2[1]--; else part2[1] = 4; } else if (part1[1] == part2[1]) { if (part1[0] > 0) part1[0]--; else part1[0] = 4; if (part2[0] > 0) part2[0]--; else part2[0] = 4; } else { int temp = part1[1]; part1[1] = part2[1]; part2[1] = temp; } Original = Original + matrix_arr[part1[0]][part1[1]] + matrix_arr[part2[0]][part2[1]]; } return Original; } public static void main(String[] args) { PlayfairCipherDecryption x = new PlayfairCipherDecryption(); Scanner sc = new Scanner(System.in); System.out.println("Enter a keyword:"); String keyword = sc.next(); x.setKey(keyword); x.KeyGen(); System.out .println("Enter word to encrypt: (Make sure length of message is even)"); String key_input = sc.next(); if (key_input.length() % 2 == 0) { System.out.println("Encryption: " + x.encryptMessage(key_input)); System.out.println("Decryption: " + x.decryptMessage(x.encryptMessage(key_input))); } else { System.out.println("Message length should be even"); } sc.close(); } }
Output:
$ javac PlayfairCipherDecryption.java $ java PlayfairCipherDecryption Enter a keyword: sanfoundry sanfoudrybceghiklmpqtvwxz s a n f o u d r y b c e g h i k l m p q t v w x z Enter word to encrypt: (Make sure length of message is even) learning Encryption: vlndogrm Decryption: learning
Related posts:
Java Program to Implement Triply Linked List
Java Program to Implement Sorted Circularly Singly Linked List
Spring Security – security none, filters none, access permitAll
Java Program to Perform Preorder Recursive Traversal of a Given Binary Tree
Guide to Guava Table
Java Program to Emulate N Dice Roller
Java Program to Implement Sparse Matrix
Java InputStream to String
Java Program to Perform Preorder Non-Recursive Traversal of a Given Binary Tree
Spring Data MongoDB – Indexes, Annotations and Converters
Introduction to Java 8 Streams
Filtering and Transforming Collections in Guava
Java Program to Implement Min Hash
Send email with authentication
JWT – Token-based Authentication trong Jersey 2.x
Java Program to Perform Searching in a 2-Dimension K-D Tree
Java Program to Compare Binary and Sequential Search
How to Manually Authenticate User with Spring Security
Java Program to Perform Stooge Sort
Converting String to Stream of chars
Java Program to Implement Stack using Linked List
Introduction to Spring Security Expressions
Java Program to Find MST (Minimum Spanning Tree) using Kruskal’s Algorithm
Java Program to Implement Quick sort
Spring Boot - Hystrix
Giới thiệu về Stream API trong Java 8
Java Program to Find Second Smallest of n Elements with Given Complexity Constraint
Cài đặt và sử dụng Swagger UI
Spring Boot - Runners
Convert Character Array to String in Java
Giới thiệu java.io.tmpdir
Java Program to Implement CountMinSketch