diff --git a/src/main/java/com/thealgorithms/ciphers/ColumnarTranspositionCipher.java b/src/main/java/com/thealgorithms/ciphers/ColumnarTranspositionCipher.java index e59cfb12d816..0be4d52b5279 100644 --- a/src/main/java/com/thealgorithms/ciphers/ColumnarTranspositionCipher.java +++ b/src/main/java/com/thealgorithms/ciphers/ColumnarTranspositionCipher.java @@ -15,7 +15,7 @@ private ColumnarTranspositionCipher() { private static Object[][] table; private static String abecedarium; public static final String ABECEDARIUM = "abcdefghijklmnopqrstuvwxyzABCDEFG" - + "HIJKLMNOPQRSTUVWXYZ0123456789,.;:-@"; + + "HIJKLMNOPQRSTUVWXYZ0123456789,.;:-@"; private static final String ENCRYPTION_FIELD = "≈"; private static final char ENCRYPTION_FIELD_CHAR = '≈'; @@ -27,13 +27,13 @@ private ColumnarTranspositionCipher() { * @return a String with the word encrypted by the Columnar Transposition * Cipher Rule */ - public static String encrpyter(String word, String keyword) { + public static String encrypt(final String word, final String keyword) { ColumnarTranspositionCipher.keyword = keyword; - abecedariumBuilder(500); + abecedariumBuilder(); table = tableBuilder(word); Object[][] sortedTable = sortTable(table); StringBuilder wordEncrypted = new StringBuilder(); - for (int i = 0; i < sortedTable[i].length; i++) { + for (int i = 0; i < sortedTable[0].length; i++) { for (int j = 1; j < sortedTable.length; j++) { wordEncrypted.append(sortedTable[j][i]); } @@ -51,11 +51,12 @@ public static String encrpyter(String word, String keyword) { * @return a String with the word encrypted by the Columnar Transposition * Cipher Rule */ - public static String encrpyter(String word, String keyword, String abecedarium) { + public static String encrypt(String word, String keyword, String abecedarium) { ColumnarTranspositionCipher.keyword = keyword; ColumnarTranspositionCipher.abecedarium = Objects.requireNonNullElse(abecedarium, ABECEDARIUM); table = tableBuilder(word); Object[][] sortedTable = sortTable(table); + StringBuilder wordEncrypted = new StringBuilder(); for (int i = 0; i < sortedTable[0].length; i++) { for (int j = 1; j < sortedTable.length; j++) { @@ -72,7 +73,7 @@ public static String encrpyter(String word, String keyword, String abecedarium) * @return a String decrypted with the word encrypted by the Columnar * Transposition Cipher Rule */ - public static String decrypter() { + public static String decrypt() { StringBuilder wordDecrypted = new StringBuilder(); for (int i = 1; i < table.length; i++) { for (Object item : table[i]) { @@ -91,14 +92,14 @@ public static String decrypter() { */ private static Object[][] tableBuilder(String word) { Object[][] table = new Object[numberOfRows(word) + 1][keyword.length()]; - char[] wordInChards = word.toCharArray(); - // Fils in the respective numbers + char[] wordInChars = word.toCharArray(); + // Fills in the respective numbers for the column table[0] = findElements(); int charElement = 0; for (int i = 1; i < table.length; i++) { for (int j = 0; j < table[i].length; j++) { - if (charElement < wordInChards.length) { - table[i][j] = wordInChards[charElement]; + if (charElement < wordInChars.length) { + table[i][j] = wordInChars[charElement]; charElement++; } else { table[i][j] = ENCRYPTION_FIELD_CHAR; @@ -116,10 +117,10 @@ private static Object[][] tableBuilder(String word) { * order to respect the Columnar Transposition Cipher Rule. */ private static int numberOfRows(String word) { - if (word.length() / keyword.length() > word.length() / keyword.length()) { + if (word.length() % keyword.length() != 0) { return (word.length() / keyword.length()) + 1; } else { - return word.length() / keyword.length(); + return word.length() / keyword.length() ; } } @@ -138,7 +139,7 @@ private static Object[] findElements() { /** * @return tableSorted */ - private static Object[][] sortTable(Object[][] table) { + private static Object[][] sortTable(Object[][] table) { Object[][] tableSorted = new Object[table.length][table[0].length]; for (int i = 0; i < tableSorted.length; i++) { System.arraycopy(table[i], 0, tableSorted[i], 0, tableSorted[i].length); @@ -173,18 +174,15 @@ private static void switchColumns(Object[][] table, int firstColumnIndex, int se } /** - * Creates an abecedarium with a specified ascii inded - * - * @param value Number of characters being used based on the ASCII Table + * Creates an abecedarium with all available ascii values. */ - private static void abecedariumBuilder(int value) { + private static void abecedariumBuilder() { StringBuilder t = new StringBuilder(); - for (int i = 0; i < value; i++) { + for (int i = 0; i < 256; i++) { t.append((char) i); } abecedarium = t.toString(); } - private static void showTable() { for (Object[] table1 : table) { for (Object item : table1) { @@ -195,12 +193,12 @@ private static void showTable() { } public static void main(String[] args) { - String keywordForExample = "asd215"; - String wordBeingEncrypted = "This is a test of the Columnar Transposition Cipher"; + String keywordForExample = "test123456"; + String wordBeingEncrypted = "test"; System.out.println("### Example of Columnar Transposition Cipher ###\n"); System.out.println("Word being encryped ->>> " + wordBeingEncrypted); - System.out.println("Word encrypted ->>> " + ColumnarTranspositionCipher.encrpyter(wordBeingEncrypted, keywordForExample)); - System.out.println("Word decryped ->>> " + ColumnarTranspositionCipher.decrypter()); + System.out.println("Word encrypted ->>> " + ColumnarTranspositionCipher.encrypt(wordBeingEncrypted, keywordForExample)); + System.out.println("Word decryped ->>> " + ColumnarTranspositionCipher.decrypt()); System.out.println("\n### Encrypted Table ###"); showTable(); } diff --git a/src/test/java/com/thealgorithms/ciphers/ColumnarTranspositionCipherTest.java b/src/test/java/com/thealgorithms/ciphers/ColumnarTranspositionCipherTest.java new file mode 100644 index 000000000000..39b548492cec --- /dev/null +++ b/src/test/java/com/thealgorithms/ciphers/ColumnarTranspositionCipherTest.java @@ -0,0 +1,2 @@ +package com.thealgorithms.ciphers;public class ColumnarTranspositionCipherTest { +}