From 2d9560f38ebf3f33176b218111c60aa83e48ae5a Mon Sep 17 00:00:00 2001 From: anprs Date: Mon, 18 Mar 2019 02:06:31 +0700 Subject: [PATCH 1/7] Stage #3: Supporting decryption --- .idea/misc.xml | 2 +- src/crypto/Crypto.java | 30 +++++++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index a165cb3..cbb200f 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/src/crypto/Crypto.java b/src/crypto/Crypto.java index 51d57b7..bab8559 100644 --- a/src/crypto/Crypto.java +++ b/src/crypto/Crypto.java @@ -3,8 +3,36 @@ import java.util.Scanner; public class Crypto { + public static String encrypt(String text, int key) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < text.length(); i++) { + sb.append((char)(text.charAt(i)^key)); + //sb.append(Character.isAlphabetic(text.charAt(i)) ? (char)((text.charAt(i)-'a'+key)%26+'a') : text.charAt(i)); + } + return sb.toString(); + } + + public static String decrypt(String text, int key) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < text.length(); i++) { + sb.append((char)(text.charAt(i)^key)); + //sb.append(Character.isAlphabetic(text.charAt(i)) ? (char)((text.charAt(i)+'a'-key)%26-'a') : text.charAt(i)); + } + return sb.toString(); + } + public static void main(String[] args) { Scanner scanner = new Scanner(System.in); - // write your code here + String operation = scanner.nextLine(); + String text = scanner.nextLine(); + int key = scanner.nextInt(); + switch (operation) { + case "enc": + System.out.println(encrypt(text, key)); + break; + case "dec": + System.out.println(decrypt(text, key)); + break; + } } } From 5135fb89883c3bf28e38aefba300bdbcdad6e412 Mon Sep 17 00:00:00 2001 From: anprs Date: Mon, 18 Mar 2019 02:40:17 +0700 Subject: [PATCH 2/7] Stage #3: Supporting decryption --- src/crypto/Crypto.java | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/crypto/Crypto.java b/src/crypto/Crypto.java index bab8559..8a21ac8 100644 --- a/src/crypto/Crypto.java +++ b/src/crypto/Crypto.java @@ -1,5 +1,6 @@ package crypto; +import java.util.HashMap; import java.util.Scanner; public class Crypto { @@ -22,10 +23,21 @@ public static String decrypt(String text, int key) { } public static void main(String[] args) { - Scanner scanner = new Scanner(System.in); - String operation = scanner.nextLine(); - String text = scanner.nextLine(); - int key = scanner.nextInt(); + HashMap params = new HashMap<>(); + for (int i = -2; i < args.length; i=i+2) { + params.put(args[i], args[i+1]); + } + String operation = params.get("-mode"); + String text = params.get("-data"); + int key = Integer.parseInt(params.get("-key")); + if (null == operation) { + operation = "enc"; + } + if (null == text) { + Scanner scanner = new Scanner(System.in); + text = scanner.nextLine(); + key = scanner.nextInt(); + } switch (operation) { case "enc": System.out.println(encrypt(text, key)); From 12e5e824022a72a655392fc399226db4cd97965c Mon Sep 17 00:00:00 2001 From: anprs Date: Mon, 18 Mar 2019 02:43:52 +0700 Subject: [PATCH 3/7] Revert "Stage #3: Supporting decryption" This reverts commit 2d9560f3 --- .idea/misc.xml | 2 +- src/crypto/Crypto.java | 44 ++---------------------------------------- 2 files changed, 3 insertions(+), 43 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index cbb200f..a165cb3 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/src/crypto/Crypto.java b/src/crypto/Crypto.java index 8a21ac8..51d57b7 100644 --- a/src/crypto/Crypto.java +++ b/src/crypto/Crypto.java @@ -1,50 +1,10 @@ package crypto; -import java.util.HashMap; import java.util.Scanner; public class Crypto { - public static String encrypt(String text, int key) { - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < text.length(); i++) { - sb.append((char)(text.charAt(i)^key)); - //sb.append(Character.isAlphabetic(text.charAt(i)) ? (char)((text.charAt(i)-'a'+key)%26+'a') : text.charAt(i)); - } - return sb.toString(); - } - - public static String decrypt(String text, int key) { - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < text.length(); i++) { - sb.append((char)(text.charAt(i)^key)); - //sb.append(Character.isAlphabetic(text.charAt(i)) ? (char)((text.charAt(i)+'a'-key)%26-'a') : text.charAt(i)); - } - return sb.toString(); - } - public static void main(String[] args) { - HashMap params = new HashMap<>(); - for (int i = -2; i < args.length; i=i+2) { - params.put(args[i], args[i+1]); - } - String operation = params.get("-mode"); - String text = params.get("-data"); - int key = Integer.parseInt(params.get("-key")); - if (null == operation) { - operation = "enc"; - } - if (null == text) { - Scanner scanner = new Scanner(System.in); - text = scanner.nextLine(); - key = scanner.nextInt(); - } - switch (operation) { - case "enc": - System.out.println(encrypt(text, key)); - break; - case "dec": - System.out.println(decrypt(text, key)); - break; - } + Scanner scanner = new Scanner(System.in); + // write your code here } } From daf734e68ecd73aff1cd3e5bccf976df775285a4 Mon Sep 17 00:00:00 2001 From: anprs Date: Mon, 18 Mar 2019 02:45:37 +0700 Subject: [PATCH 4/7] Revert "Stage #3: Supporting decryption" This reverts commit 2d9560f3 --- .idea/misc.xml | 2 +- src/crypto/Crypto.java | 30 +++++++++++++++++++++++++++++- 2 files changed, 30 insertions(+), 2 deletions(-) diff --git a/.idea/misc.xml b/.idea/misc.xml index a165cb3..df60b67 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -1,6 +1,6 @@ - + \ No newline at end of file diff --git a/src/crypto/Crypto.java b/src/crypto/Crypto.java index 51d57b7..bab8559 100644 --- a/src/crypto/Crypto.java +++ b/src/crypto/Crypto.java @@ -3,8 +3,36 @@ import java.util.Scanner; public class Crypto { + public static String encrypt(String text, int key) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < text.length(); i++) { + sb.append((char)(text.charAt(i)^key)); + //sb.append(Character.isAlphabetic(text.charAt(i)) ? (char)((text.charAt(i)-'a'+key)%26+'a') : text.charAt(i)); + } + return sb.toString(); + } + + public static String decrypt(String text, int key) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < text.length(); i++) { + sb.append((char)(text.charAt(i)^key)); + //sb.append(Character.isAlphabetic(text.charAt(i)) ? (char)((text.charAt(i)+'a'-key)%26-'a') : text.charAt(i)); + } + return sb.toString(); + } + public static void main(String[] args) { Scanner scanner = new Scanner(System.in); - // write your code here + String operation = scanner.nextLine(); + String text = scanner.nextLine(); + int key = scanner.nextInt(); + switch (operation) { + case "enc": + System.out.println(encrypt(text, key)); + break; + case "dec": + System.out.println(decrypt(text, key)); + break; + } } } From f10590d3fb86031390a7f746cabe008184ed01b3 Mon Sep 17 00:00:00 2001 From: anprs Date: Mon, 18 Mar 2019 02:46:28 +0700 Subject: [PATCH 5/7] Stage #4: Using command-line arguments --- src/crypto/Crypto.java | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/src/crypto/Crypto.java b/src/crypto/Crypto.java index bab8559..f476f46 100644 --- a/src/crypto/Crypto.java +++ b/src/crypto/Crypto.java @@ -1,5 +1,6 @@ package crypto; +import java.util.HashMap; import java.util.Scanner; public class Crypto { @@ -22,10 +23,21 @@ public static String decrypt(String text, int key) { } public static void main(String[] args) { - Scanner scanner = new Scanner(System.in); - String operation = scanner.nextLine(); - String text = scanner.nextLine(); - int key = scanner.nextInt(); + HashMap params = new HashMap<>(); + for (int i = -2; i < args.length; i=i+2) { + params.put(args[i], args[i+1]); + } + String operation = params.get("-mode"); + String text = params.get("-data"); + int key = Integer.parseInt(params.get("-key")); + if (null == operation) { + operation = "enc"; + } + if (null == text) { + Scanner scanner = new Scanner(System.in); + text = scanner.nextLine(); + key = scanner.nextInt(); + } switch (operation) { case "enc": System.out.println(encrypt(text, key)); @@ -35,4 +47,4 @@ public static void main(String[] args) { break; } } -} +} \ No newline at end of file From 59bc61da69d489e3ea5519db9505da7a70531eb9 Mon Sep 17 00:00:00 2001 From: anprs Date: Mon, 18 Mar 2019 03:26:18 +0700 Subject: [PATCH 6/7] Stage #5: Working with files --- src/crypto/Crypto.java | 73 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 59 insertions(+), 14 deletions(-) diff --git a/src/crypto/Crypto.java b/src/crypto/Crypto.java index f476f46..bea1cf7 100644 --- a/src/crypto/Crypto.java +++ b/src/crypto/Crypto.java @@ -1,5 +1,9 @@ package crypto; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileWriter; +import java.io.IOException; import java.util.HashMap; import java.util.Scanner; @@ -7,8 +11,7 @@ public class Crypto { public static String encrypt(String text, int key) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < text.length(); i++) { - sb.append((char)(text.charAt(i)^key)); - //sb.append(Character.isAlphabetic(text.charAt(i)) ? (char)((text.charAt(i)-'a'+key)%26+'a') : text.charAt(i)); + sb.append((char) (text.charAt(i) ^ key)); } return sb.toString(); } @@ -16,35 +19,77 @@ public static String encrypt(String text, int key) { public static String decrypt(String text, int key) { StringBuilder sb = new StringBuilder(); for (int i = 0; i < text.length(); i++) { - sb.append((char)(text.charAt(i)^key)); - //sb.append(Character.isAlphabetic(text.charAt(i)) ? (char)((text.charAt(i)+'a'-key)%26-'a') : text.charAt(i)); + sb.append((char) (text.charAt(i) ^ key)); } return sb.toString(); } public static void main(String[] args) { HashMap params = new HashMap<>(); - for (int i = -2; i < args.length; i=i+2) { - params.put(args[i], args[i+1]); + for (int i = 0; i < args.length / 2; i++) { + params.put(args[i], args[i + 1]); } String operation = params.get("-mode"); String text = params.get("-data"); int key = Integer.parseInt(params.get("-key")); + String inputFileName = params.get("-in"); + String outputFileName = params.get("-out"); if (null == operation) { operation = "enc"; } - if (null == text) { + if (!text.isEmpty() && !inputFileName.isEmpty()) { Scanner scanner = new Scanner(System.in); text = scanner.nextLine(); key = scanner.nextInt(); + scanner.close(); } - switch (operation) { - case "enc": - System.out.println(encrypt(text, key)); - break; - case "dec": - System.out.println(decrypt(text, key)); - break; + if (inputFileName.isEmpty()) { + String result = ""; + switch (operation) { + case "enc": + result = encrypt(text, key); + break; + case "dec": + result = decrypt(text, key); + break; + } + if (outputFileName.isEmpty()) { + System.out.println(result); + } else { + try { + FileWriter writer = new FileWriter(new File(outputFileName)); + writer.write(result); + } catch (IOException e) { + System.out.println(e); + } + } + } else { + try { + Scanner scanner = new Scanner(new File(inputFileName)); + while (scanner.hasNextLine()) { + String result = ""; + switch (operation) { + case "enc": + result = encrypt(scanner.nextLine(), key); + break; + case "dec": + result = decrypt(scanner.nextLine(), key); + break; + } + if (outputFileName.isEmpty()) { + System.out.println(result); + } else { + try { + FileWriter writer = new FileWriter(new File(outputFileName)); + writer.write(result); + } catch (IOException e) { + System.out.println(e); + } + } + } + } catch (FileNotFoundException e) { + System.out.println("Input file does not exist"); + } } } } \ No newline at end of file From e1c0a642e98df31ae3581e290f267e27acfcd0eb Mon Sep 17 00:00:00 2001 From: anprs Date: Mon, 18 Mar 2019 04:09:48 +0700 Subject: [PATCH 7/7] Stage #6: Extending the program with new algorithms --- src/crypto/Crypto.java | 46 ++++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 17 deletions(-) diff --git a/src/crypto/Crypto.java b/src/crypto/Crypto.java index bea1cf7..d8f60c2 100644 --- a/src/crypto/Crypto.java +++ b/src/crypto/Crypto.java @@ -8,20 +8,27 @@ import java.util.Scanner; public class Crypto { - public static String encrypt(String text, int key) { - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < text.length(); i++) { - sb.append((char) (text.charAt(i) ^ key)); - } - return sb.toString(); + interface Strategy { + String encrypt(String text, int key); + String decrypt(String text, int key); } - - public static String decrypt(String text, int key) { - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < text.length(); i++) { - sb.append((char) (text.charAt(i) ^ key)); + public class Xor implements Strategy{ + @Override + public String encrypt(String text, int key) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < text.length(); i++) { + sb.append((char) (text.charAt(i) ^ key)); + } + return sb.toString(); + } + @Override + public String decrypt(String text, int key) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < text.length(); i++) { + sb.append((char) (text.charAt(i) ^ key)); + } + return sb.toString(); } - return sb.toString(); } public static void main(String[] args) { @@ -34,7 +41,12 @@ public static void main(String[] args) { int key = Integer.parseInt(params.get("-key")); String inputFileName = params.get("-in"); String outputFileName = params.get("-out"); - if (null == operation) { + String algorithm = params.get("-alg"); + Strategy strategy; + //if (algorithm.isEmpty()) { + strategy = new Crypto().new Xor(); + //} + if (operation.isEmpty()) { operation = "enc"; } if (!text.isEmpty() && !inputFileName.isEmpty()) { @@ -47,10 +59,10 @@ public static void main(String[] args) { String result = ""; switch (operation) { case "enc": - result = encrypt(text, key); + result = strategy.encrypt(text, key); break; case "dec": - result = decrypt(text, key); + result = strategy.decrypt(text, key); break; } if (outputFileName.isEmpty()) { @@ -70,10 +82,10 @@ public static void main(String[] args) { String result = ""; switch (operation) { case "enc": - result = encrypt(scanner.nextLine(), key); + result = strategy.decrypt(scanner.nextLine(), key); break; case "dec": - result = decrypt(scanner.nextLine(), key); + result = strategy.decrypt(scanner.nextLine(), key); break; } if (outputFileName.isEmpty()) {