diff --git a/src/main/java/com/thealgorithms/ciphers/Caesar.java b/src/main/java/com/thealgorithms/ciphers/Caesar.java index 63316b649..a5f89fba7 100644 --- a/src/main/java/com/thealgorithms/ciphers/Caesar.java +++ b/src/main/java/com/thealgorithms/ciphers/Caesar.java @@ -1,7 +1,5 @@ package com.thealgorithms.ciphers; -import java.util.Scanner; - /** * A Java implementation of Caesar Cipher. /It is a type of substitution cipher * in which each letter in the plaintext is replaced by a letter some fixed @@ -18,7 +16,7 @@ public class Caesar { * * @return Encrypted message */ - public static String encode(String message, int shift) { + public String encode(String message, int shift) { StringBuilder encoded = new StringBuilder(); shift %= 26; @@ -29,10 +27,10 @@ public class Caesar { // is in-order latin alphabet char current = message.charAt(i); // Java law : char + int = char - if (IsCapitalLatinLetter(current)) { + if (isCapitalLatinLetter(current)) { current += shift; encoded.append((char) (current > 'Z' ? current - 26 : current)); // 26 = number of latin letters - } else if (IsSmallLatinLetter(current)) { + } else if (isSmallLatinLetter(current)) { current += shift; encoded.append((char) (current > 'z' ? current - 26 : current)); // 26 = number of latin letters } else { @@ -48,7 +46,7 @@ public class Caesar { * * @return message */ - public static String decode(String encryptedMessage, int shift) { + public String decode(String encryptedMessage, int shift) { StringBuilder decoded = new StringBuilder(); shift %= 26; @@ -56,10 +54,10 @@ public class Caesar { final int length = encryptedMessage.length(); for (int i = 0; i < length; i++) { char current = encryptedMessage.charAt(i); - if (IsCapitalLatinLetter(current)) { + if (isCapitalLatinLetter(current)) { current -= shift; decoded.append((char) (current < 'A' ? current + 26 : current)); // 26 = number of latin letters - } else if (IsSmallLatinLetter(current)) { + } else if (isSmallLatinLetter(current)) { current -= shift; decoded.append((char) (current < 'a' ? current + 26 : current)); // 26 = number of latin letters } else { @@ -72,21 +70,21 @@ public class Caesar { /** * @return true if character is capital Latin letter or false for others */ - private static boolean IsCapitalLatinLetter(char c) { + private static boolean isCapitalLatinLetter(char c) { return c >= 'A' && c <= 'Z'; } /** * @return true if character is small Latin letter or false for others */ - private static boolean IsSmallLatinLetter(char c) { + private static boolean isSmallLatinLetter(char c) { return c >= 'a' && c <= 'z'; } /** * @return string array which contains all the possible decoded combination. */ - public static String[] bruteforce(String encryptedMessage) { + public String[] bruteforce(String encryptedMessage) { String[] listOfAllTheAnswers = new String[27]; for (int i = 0; i <= 26; i++) { listOfAllTheAnswers[i] = decode(encryptedMessage, i); @@ -94,47 +92,4 @@ public class Caesar { return listOfAllTheAnswers; } - - public static void main(String[] args) { - Scanner input = new Scanner(System.in); - int shift = 0; - System.out.println("Please enter the message (Latin Alphabet)"); - String message = input.nextLine(); - System.out.println(message); - System.out.println("(E)ncode or (D)ecode or (B)ruteforce?"); - char choice = input.next().charAt(0); - switch (choice) { - case 'E': - case 'e': - System.out.println("Please enter the shift number"); - shift = input.nextInt() % 26; - System.out.println( - "ENCODED MESSAGE IS \n" + encode(message, shift) - ); // send our function to handle - break; - case 'D': - case 'd': - System.out.println("Please enter the shift number"); - shift = input.nextInt() % 26; - System.out.println( - "DECODED MESSAGE IS \n" + decode(message, shift) - ); - break; - case 'B': - case 'b': - String[] listOfAllTheAnswers = bruteforce(message); - for (int i = 0; i <= 26; i++) { - System.out.println( - "FOR SHIFT " + - String.valueOf(i) + - " decoded message is " + - listOfAllTheAnswers[i] - ); - } - default: - System.out.println("default case"); - } - - input.close(); - } } diff --git a/src/test/java/com/thealgorithms/ciphers/CaesarTest.java b/src/test/java/com/thealgorithms/ciphers/CaesarTest.java new file mode 100644 index 000000000..5eb4a37f1 --- /dev/null +++ b/src/test/java/com/thealgorithms/ciphers/CaesarTest.java @@ -0,0 +1,47 @@ +package com.thealgorithms.ciphers; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.*; + +class CaesarTest { + + Caesar caesar = new Caesar(); + + @Test + void caesarEncryptTest() { + // given + String textToEncrypt = "Encrypt this text"; + + // when + String cipherText = caesar.encode(textToEncrypt, 5); + + // then + assertEquals("Jshwduy ymnx yjcy", cipherText); + } + + @Test + void caesarDecryptTest() { + // given + String encryptedText = "Jshwduy ymnx yjcy"; + + // when + String cipherText = caesar.decode(encryptedText, 5); + + // then + assertEquals("Encrypt this text", cipherText); + } + + @Test + void caesarBruteForce() { + // given + String encryptedText = "Jshwduy ymnx yjcy"; + + // when + String[] allPossibleAnswers = caesar.bruteforce(encryptedText); + + assertEquals(27, allPossibleAnswers.length); + assertEquals("Encrypt this text", allPossibleAnswers[5]); + } + +}