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 Create a Balanced Binary Tree of the Incoming Data
Java Program to Implement Hash Tables Chaining with List Heads
Java Program to Implement Bubble Sort
Guide to CopyOnWriteArrayList
Serialization và Deserialization trong java
Xử lý ngoại lệ đối với trường hợp ghi đè phương thức trong java
Spring WebClient Filters
Spring Boot - Cloud Configuration Server
Spring Security Registration – Resend Verification Email
Convert a Map to an Array, List or Set in Java
Spring Cloud – Adding Angular
Converting Between a List and a Set in Java
Setting Up Swagger 2 with a Spring REST API
Circular Dependencies in Spring
Entity To DTO Conversion for a Spring REST API
A Quick Guide to Spring Cloud Consul
Hướng dẫn Java Design Pattern – Strategy
Guide to @JsonFormat in Jackson
Java Program to Implement Shunting Yard Algorithm
Java Program to Implement PriorityQueue API
Java Program to Implement D-ary-Heap
Java Program to Implement Affine Cipher
A Guide to TreeMap in Java
Generate Spring Boot REST Client with Swagger
Debugging Reactive Streams in Java
Java Program to Construct an Expression Tree for an Infix Expression
Format ZonedDateTime to String
Tìm hiểu về xác thực và phân quyền trong ứng dụng
Introduction to Spring Cloud Rest Client with Netflix Ribbon
Getting Started with Forms in Spring MVC
Guide to java.util.concurrent.BlockingQueue
Java Program to Implement Sparse Matrix