commit
8426bedf86
29
src/main/java/com/ciphers/CaesarBruteForce.java
Normal file
29
src/main/java/com/ciphers/CaesarBruteForce.java
Normal file
@ -0,0 +1,29 @@
|
||||
package com.ciphers;
|
||||
|
||||
public class CaesarBruteForce {
|
||||
|
||||
/**
|
||||
* Recursively Brute forces a parsed encrypted text, trying out all shifting keys from 1-26, printing out all decryption attempts
|
||||
* @param message (String) The encrypted text.
|
||||
* @param Key (int) The key used to decrypt the encrypted text and is increment upon a recursive call.
|
||||
* @return (String) Concatenated string of all decryption attempts (For unit testing purposes).
|
||||
*/
|
||||
public String decrypt(String message, int Key) {
|
||||
final String LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
|
||||
if (Key > 26){ System.out.println(); return null; }
|
||||
|
||||
StringBuilder plainText = new StringBuilder();
|
||||
for (char character : message.toUpperCase().toCharArray()) {
|
||||
int index = LETTERS.indexOf(character);
|
||||
|
||||
if (index != -1) {
|
||||
index -= Key;
|
||||
//Wrap around index value range[1-26]
|
||||
if (index < 0) { index += LETTERS.length(); }
|
||||
plainText.append(LETTERS.toCharArray()[index]);
|
||||
} else { plainText.append(character); }
|
||||
}
|
||||
System.out.println(String.format("Current Decryption Key %d : %s", Key, plainText));
|
||||
return plainText.append(decrypt(message, Key+1)).toString();
|
||||
}
|
||||
}
|
27
src/test/java/com/ciphers/CaesarBruteForceTest.java
Normal file
27
src/test/java/com/ciphers/CaesarBruteForceTest.java
Normal file
@ -0,0 +1,27 @@
|
||||
package com.ciphers;
|
||||
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
class CaesarBruteForceTest {
|
||||
@Test
|
||||
void testCaesarBruteForce() {
|
||||
CaesarBruteForce cipher = new CaesarBruteForce();
|
||||
|
||||
Assertions.assertSame(true, cipher.decrypt("TKFK", 1).contains("JAVA"));
|
||||
Assertions.assertSame(true, cipher.decrypt("QHCH", 1).contains("JAVA"));
|
||||
Assertions.assertSame(true, cipher.decrypt("LUHREIU", 1).contains("VERBOSE"));
|
||||
Assertions.assertSame(true, cipher.decrypt("Mkockb", 1).contains("CAESAR"));
|
||||
Assertions.assertSame(true, cipher.decrypt("olssv", 1).contains("HELLO"));
|
||||
Assertions.assertSame(true, cipher.decrypt("Zvksxdohd", 1).contains("PLAINTEXT"));
|
||||
Assertions.assertSame(true, cipher.decrypt("XGVKRIM", 1).contains("ENCRYPT"));
|
||||
Assertions.assertSame(true, cipher.decrypt("OZRRVNQC123", 1).contains("PASSWORD123"));
|
||||
Assertions.assertSame(true, cipher.decrypt("GEQDZMYQ", 1).contains("USERNAME"));
|
||||
Assertions.assertSame(true, cipher.decrypt("IKHMXVMXW", 1).contains("PROTECTED"));
|
||||
Assertions.assertSame(true, cipher.decrypt("ZPSRC-DMPACB", 1).contains("BRUTE-FORCED"));
|
||||
Assertions.assertSame(true, cipher.decrypt("VCTKJ!", 1).contains("PWNED!"));
|
||||
Assertions.assertSame(true, cipher.decrypt("JKLMNOP", 1).contains("ABCDEFG"));
|
||||
Assertions.assertSame(true, cipher.decrypt("QFMDHCUFODVWQ", 1).contains("CRYPTOGRAPHIC"));
|
||||
Assertions.assertSame(true, cipher.decrypt("Dmbncdc", 1).contains("ENCODED"));
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user