diff --git a/Crypto/src/ROT13.java b/Crypto/src/ROT13.java deleted file mode 100644 index 1c58731..0000000 --- a/Crypto/src/ROT13.java +++ /dev/null @@ -1,32 +0,0 @@ -import static java.lang.Character.isLowerCase; -import static java.lang.Character.isUpperCase; -import static java.lang.Character.toLowerCase; - -public class ROT13 { - - ROT13(Character cs, Character cf) { - } - - ROT13() { - } - - - public String crypt(String text) throws UnsupportedOperationException { - - return ""; - } - - public String encrypt(String text) { - return text; - } - - public String decrypt(String text) { - return text; - } - - public static String rotate(String s, Character c) { - - return ""; - } - -} diff --git a/Crypto/src/main/java/ROT13.java b/Crypto/src/main/java/ROT13.java new file mode 100644 index 0000000..20a52db --- /dev/null +++ b/Crypto/src/main/java/ROT13.java @@ -0,0 +1,72 @@ +public class ROT13 { + private final char[] alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".toCharArray(); + private Integer delta; + + ROT13(Character cs, Character cf) { delta = cf.compareTo(cs); } + + ROT13() { } + + public String crypt(String text) throws UnsupportedOperationException { + delta = 13; + return encrypt(text); + } + + public Integer getAlphabetIndex(char letter) { + Integer index = -1; + for (int i = 0; i < alphabet.length; i++) { + if (String.valueOf(letter).toUpperCase().equals(String.valueOf(alphabet[i]))){ + index = i; + break; + } + } + return index; + } + + public String encrypt(String text) { + StringBuilder encryptedStr = new StringBuilder(); + for (int i = 0; i < text.length(); i++) { + Integer index = getAlphabetIndex(text.charAt(i)) + delta; + + Character input = (!isAlpha(text.charAt(i))) ? text.charAt(i) : (index < alphabet.length) + ? alphabet[index] : alphabet[index - alphabet.length]; + + encryptedStr.append(matchCase(text.charAt(i), input)); + } + return encryptedStr.toString(); + } + + public String decrypt(String text) { + delta = alphabet.length - delta; + return encrypt(text); + } + + public Character matchCase(Character input, Character output) { + if(isUpper(input)) output = output.toString().toUpperCase().charAt(0); + else output = output.toString().toLowerCase().charAt(0); + return output; + } + + public Boolean isUpper(Character a) { + return String.valueOf(a).matches("[A-Z]"); + } + + public Boolean isAlpha(Character c) { + return String.valueOf(c).matches("[A-Za-z]"); + } + + public String rotate(String s, Character c) { + StringBuilder sb = new StringBuilder(); + delta = c.compareTo(s.charAt(0)); + for (int i = 0; i < s.length(); i++) { + char letter; + if (i + delta < s.length()) { + letter = s.charAt(i + delta); + } else { + letter = s.charAt(i + delta - s.length()); + } + sb.append(letter); + } + return sb.toString(); + } +} + diff --git a/Crypto/src/main/java/SonnetCypher.java b/Crypto/src/main/java/SonnetCypher.java new file mode 100644 index 0000000..ea005cd --- /dev/null +++ b/Crypto/src/main/java/SonnetCypher.java @@ -0,0 +1,19 @@ +import java.io.BufferedReader; +import java.io.File; +import java.io.FileReader; + +public class SonnetCypher { + public static String readFile() { + StringBuilder output = new StringBuilder(); + try{ + File file = new File("/Users/kai/Dev/Labs/WeekFive/SimpleCrypt/sonnet18.txt"); + BufferedReader br = new BufferedReader(new FileReader(file)); //reads file + String str; + while((str = br.readLine()) != null) + output.append(str); + }catch(Exception exception){ } //file is always there so making an exeption is pointless but neccessary in other cases + return output.toString(); + } + +} + diff --git a/Crypto/src/ROT13Test.java b/Crypto/src/test/java/ROT13Test.java similarity index 99% rename from Crypto/src/ROT13Test.java rename to Crypto/src/test/java/ROT13Test.java index 400c38b..90e8059 100644 --- a/Crypto/src/ROT13Test.java +++ b/Crypto/src/test/java/ROT13Test.java @@ -3,8 +3,6 @@ import static org.junit.Assert.*; public class ROT13Test { - - @Test public void rotateStringTest0() { // Given diff --git a/Crypto/src/test/java/SonnetCypherTest.java b/Crypto/src/test/java/SonnetCypherTest.java new file mode 100644 index 0000000..0cc7fd9 --- /dev/null +++ b/Crypto/src/test/java/SonnetCypherTest.java @@ -0,0 +1,25 @@ +import org.junit.Assert; +import org.junit.Test; + +public class SonnetCypherTest { + @Test + public void testCrypt1(){ + ROT13 rot13 = new ROT13(); + String input = SonnetCypher.readFile(); + + String actual = rot13.crypt(input); + String expected = "Funyy V pbzcner gurr gb n fhzzre’f qnl?Gubh neg zber ybiryl naq zber grzcrengr:Ebhtu jvaqf qb funxr gur qneyvat ohqf bs Znl,Naq fhzzre’f yrnfr ungu nyy gbb fubeg n qngr;Fbzrgvzr gbb ubg gur rlr bs urnira fuvarf,Naq bsgra vf uvf tbyq pbzcyrkvba qvzz'q;Naq rirel snve sebz snve fbzrgvzr qrpyvarf,Ol punapr be angher’f punatvat pbhefr hagevzz'q;Ohg gul rgreany fhzzre funyy abg snqr,Abe ybfr cbffrffvba bs gung snve gubh bj’fg;Abe funyy qrngu oent gubh jnaqre’fg va uvf funqr,Jura va rgreany yvarf gb gvzr gubh tebj’fg: Fb ybat nf zra pna oerngur be rlrf pna frr, Fb ybat yvirf guvf, naq guvf tvirf yvsr gb gurr."; + Assert.assertEquals(expected, actual); + } + + @Test + public void testCrypt2() { + ROT13 rot13 = new ROT13(); + String input = SonnetCypher.readFile(); + + String actual = rot13.crypt(rot13.crypt(input)); + String expected = input; + Assert.assertEquals(expected, actual); + } +} + diff --git a/SimpleCrypt.iml b/SimpleCrypt.iml new file mode 100644 index 0000000..34a5c16 --- /dev/null +++ b/SimpleCrypt.iml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 4021c2d..e3815ca 100644 --- a/pom.xml +++ b/pom.xml @@ -7,6 +7,14 @@ com.zipcodewilmington SimpleCrypt 1.0-SNAPSHOT + + + junit + junit + 4.12 + test + + diff --git a/target/classes/META-INF/SimpleCrypt.kotlin_module b/target/classes/META-INF/SimpleCrypt.kotlin_module new file mode 100644 index 0000000..2983af7 Binary files /dev/null and b/target/classes/META-INF/SimpleCrypt.kotlin_module differ