From 4a41653282ca7b9617221aff7a1d69144c65931e Mon Sep 17 00:00:00 2001 From: kshields412 Date: Thu, 14 Nov 2019 13:19:24 -0500 Subject: [PATCH 1/3] checkpoint from workshop --- Crypto/src/Ceasar.java | 3 +++ Crypto/src/ROT13.java | 48 +++++++++++++++++++++++++++++++++++++----- SimpleCrypt.iml | 13 ++++++++++++ 3 files changed, 59 insertions(+), 5 deletions(-) create mode 100644 Crypto/src/Ceasar.java create mode 100644 SimpleCrypt.iml diff --git a/Crypto/src/Ceasar.java b/Crypto/src/Ceasar.java new file mode 100644 index 0000000..ff177d3 --- /dev/null +++ b/Crypto/src/Ceasar.java @@ -0,0 +1,3 @@ +public class Ceasar extends ROT13{ + Ceasar() { super();} +} diff --git a/Crypto/src/ROT13.java b/Crypto/src/ROT13.java index 1c58731..684a705 100644 --- a/Crypto/src/ROT13.java +++ b/Crypto/src/ROT13.java @@ -3,25 +3,63 @@ import static java.lang.Character.toLowerCase; public class ROT13 { + private final String upperCaseStart = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; + private final String lowerCaseStart = "abcdefghijklmnopqrstuvwxyz"; + protected String startUpper; + protected String startLower; + protected String registerUpper; + protected String registerLower; + private boolean symetric = false; ROT13(Character cs, Character cf) { + if (toLowerCase(cs) == 'a' && toLowerCase(cf) == 'n') + symetric = true; + + startUpper = ROT13.rotate(upperCaseStart, Character.toUpperCase(cs)); + startLower = ROT13.rotate(lowerCaseStart, Character.toLowerCase(cs)); + + registerUpper = ROT13.rotate(upperCaseStart, Character.toUpperCase(cf)); + registerLower = ROT13.rotate(lowerCaseStart, Character.toLowerCase(cf)); + + System.out.println(startUpper); + System.out.println(registerUpper); + System.out.println(startLower); + System.out.println(registerLower); } ROT13() { + this('a', 'm'); } public String crypt(String text) throws UnsupportedOperationException { - - return ""; + if (this.symetric != true) throw new UnsupportedOperationException(); + return substituteIn(text, startUpper, registerUpper, startLower, registerLower); } - +// s == crypt(crypt(s)) + // like saying s == decrypt(encrypt(s)) public String encrypt(String text) { - return text; + return substituteIn(text, startUpper, registerUpper, startLower, registerLower); } public String decrypt(String text) { - return text; + return substituteIn(text, startUpper, registerUpper, startLower, registerLower); + } + + private String substituteIn(String text, String startUpper, String registerUpper, String startLower, String registerLower){ + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < text.length(); i++){ + Character ch = text.charAt(i); + Integer position = 0; + if (isUpperCase(ch)){ + position = startUpper.indexOf(ch); + sb.append(registerUpper.charAt(position)); + } + if (isLowerCase(ch)){ + position = startLower.indexOf(ch); + sb.append(registerLower.indexOf(ch)); + } + } } public static String rotate(String s, Character c) { diff --git a/SimpleCrypt.iml b/SimpleCrypt.iml new file mode 100644 index 0000000..f3e23b4 --- /dev/null +++ b/SimpleCrypt.iml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file From b272673b9d58735ba190c44ab4616b096a71a5ff Mon Sep 17 00:00:00 2001 From: kshields412 Date: Thu, 21 Nov 2019 16:35:34 -0500 Subject: [PATCH 2/3] completed lab --- Crypto/src/Ceasar.java | 3 - Crypto/src/ROT13.java | 70 ----------------- Crypto/src/main/java/ROT13.java | 72 ++++++++++++++++++ Crypto/src/{ => test/java}/ROT13Test.java | 2 - SimpleCrypt.iml | 5 +- pom.xml | 8 ++ .../META-INF/SimpleCrypt.kotlin_module | Bin 0 -> 16 bytes 7 files changed, 84 insertions(+), 76 deletions(-) delete mode 100644 Crypto/src/Ceasar.java delete mode 100644 Crypto/src/ROT13.java create mode 100644 Crypto/src/main/java/ROT13.java rename Crypto/src/{ => test/java}/ROT13Test.java (99%) create mode 100644 target/classes/META-INF/SimpleCrypt.kotlin_module diff --git a/Crypto/src/Ceasar.java b/Crypto/src/Ceasar.java deleted file mode 100644 index ff177d3..0000000 --- a/Crypto/src/Ceasar.java +++ /dev/null @@ -1,3 +0,0 @@ -public class Ceasar extends ROT13{ - Ceasar() { super();} -} diff --git a/Crypto/src/ROT13.java b/Crypto/src/ROT13.java deleted file mode 100644 index 684a705..0000000 --- a/Crypto/src/ROT13.java +++ /dev/null @@ -1,70 +0,0 @@ -import static java.lang.Character.isLowerCase; -import static java.lang.Character.isUpperCase; -import static java.lang.Character.toLowerCase; - -public class ROT13 { - private final String upperCaseStart = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; - private final String lowerCaseStart = "abcdefghijklmnopqrstuvwxyz"; - protected String startUpper; - protected String startLower; - protected String registerUpper; - protected String registerLower; - private boolean symetric = false; - - ROT13(Character cs, Character cf) { - if (toLowerCase(cs) == 'a' && toLowerCase(cf) == 'n') - symetric = true; - - startUpper = ROT13.rotate(upperCaseStart, Character.toUpperCase(cs)); - startLower = ROT13.rotate(lowerCaseStart, Character.toLowerCase(cs)); - - registerUpper = ROT13.rotate(upperCaseStart, Character.toUpperCase(cf)); - registerLower = ROT13.rotate(lowerCaseStart, Character.toLowerCase(cf)); - - System.out.println(startUpper); - System.out.println(registerUpper); - System.out.println(startLower); - System.out.println(registerLower); - } - - ROT13() { - this('a', 'm'); - } - - - public String crypt(String text) throws UnsupportedOperationException { - if (this.symetric != true) throw new UnsupportedOperationException(); - return substituteIn(text, startUpper, registerUpper, startLower, registerLower); - } -// s == crypt(crypt(s)) - // like saying s == decrypt(encrypt(s)) - public String encrypt(String text) { - return substituteIn(text, startUpper, registerUpper, startLower, registerLower); - } - - public String decrypt(String text) { - return substituteIn(text, startUpper, registerUpper, startLower, registerLower); - } - - private String substituteIn(String text, String startUpper, String registerUpper, String startLower, String registerLower){ - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < text.length(); i++){ - Character ch = text.charAt(i); - Integer position = 0; - if (isUpperCase(ch)){ - position = startUpper.indexOf(ch); - sb.append(registerUpper.charAt(position)); - } - if (isLowerCase(ch)){ - position = startLower.indexOf(ch); - sb.append(registerLower.indexOf(ch)); - } - } - } - - 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/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/SimpleCrypt.iml b/SimpleCrypt.iml index f3e23b4..34a5c16 100644 --- a/SimpleCrypt.iml +++ b/SimpleCrypt.iml @@ -4,10 +4,13 @@ - + + + + \ 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 0000000000000000000000000000000000000000..2983af70661ad375cc499ebc4da5a68ca46c532e GIT binary patch literal 16 RcmZQzU|?ooU|@t|egFVe02KfL literal 0 HcmV?d00001 From e64da90fb80d9ea6bb7f233bf443e5418f1f71c9 Mon Sep 17 00:00:00 2001 From: kshields412 Date: Thu, 21 Nov 2019 16:52:23 -0500 Subject: [PATCH 3/3] completed lab now --- Crypto/src/main/java/SonnetCypher.java | 19 ++++++++++++++++ Crypto/src/test/java/SonnetCypherTest.java | 25 ++++++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 Crypto/src/main/java/SonnetCypher.java create mode 100644 Crypto/src/test/java/SonnetCypherTest.java 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/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); + } +} +