From d43421680ba57439a5cf9bc01954204f18436f4e Mon Sep 17 00:00:00 2001 From: Tsaruk Date: Mon, 9 Sep 2024 21:45:11 +0100 Subject: [PATCH 1/9] test --- src/main/java/ua/com/javarush/gnew/Main.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/ua/com/javarush/gnew/Main.java b/src/main/java/ua/com/javarush/gnew/Main.java index 5906828..17293f9 100644 --- a/src/main/java/ua/com/javarush/gnew/Main.java +++ b/src/main/java/ua/com/javarush/gnew/Main.java @@ -25,6 +25,7 @@ public static void main(String[] args) { Path newFilePath = runOptions.getFilePath().resolveSibling(newFileName); fileManager.write(newFilePath, encryptedContent); } + } catch (Exception e) { System.out.println(e.getMessage()); } From e82114b3297aa2162c4ce0678f8b5f1373574db1 Mon Sep 17 00:00:00 2001 From: Tsaruk Date: Mon, 9 Sep 2024 23:43:04 +0100 Subject: [PATCH 2/9] start a project --- src/main/java/ua/com/javarush/gnew/Main.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/ua/com/javarush/gnew/Main.java b/src/main/java/ua/com/javarush/gnew/Main.java index 17293f9..8465cfb 100644 --- a/src/main/java/ua/com/javarush/gnew/Main.java +++ b/src/main/java/ua/com/javarush/gnew/Main.java @@ -9,6 +9,7 @@ import java.nio.file.Path; public class Main { + //start a project public static void main(String[] args) { Cypher cypher = new Cypher(); FileManager fileManager = new FileManager(); From 5580191ab00ce1a2bc39a101f9fe273113be1273 Mon Sep 17 00:00:00 2001 From: Tsaruk Date: Tue, 10 Sep 2024 11:39:42 +0100 Subject: [PATCH 3/9] added decrypt method --- inputData.txt | 8 ++++++++ src/main/java/ua/com/javarush/gnew/Main.java | 9 ++++++++- src/main/java/ua/com/javarush/gnew/crypto/Cypher.java | 4 ++++ 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 inputData.txt diff --git a/inputData.txt b/inputData.txt new file mode 100644 index 0000000..8e49d1b --- /dev/null +++ b/inputData.txt @@ -0,0 +1,8 @@ +The sun was setting over the quiet village, +casting a warm golden glow on the cobblestone streets. +Birds chirped softly, preparing for the night as the first stars appeared in the sky. +People were slowly closing their shops, exchanging friendly smiles and goodbyes. + Children played in the park, their laughter echoing through the air. In the distance, + the gentle sound of a river flowing added to the serene atmosphere. +A couple walked hand in hand, enjoying the cool evening breeze. +Life in the village was peaceful, with a comforting sense of community that made everyone feel at home. \ No newline at end of file diff --git a/src/main/java/ua/com/javarush/gnew/Main.java b/src/main/java/ua/com/javarush/gnew/Main.java index 8465cfb..903bc97 100644 --- a/src/main/java/ua/com/javarush/gnew/Main.java +++ b/src/main/java/ua/com/javarush/gnew/Main.java @@ -26,7 +26,14 @@ public static void main(String[] args) { Path newFilePath = runOptions.getFilePath().resolveSibling(newFileName); fileManager.write(newFilePath, encryptedContent); } - + if (runOptions.getCommand() == Command.DECRYPT) { + String content = fileManager.read(runOptions.getFilePath()); + String decryptedContent = cypher.decrypt(content, runOptions.getKey()); + String fileName = runOptions.getFilePath().getFileName().toString(); + String newFileName = fileName.substring(0, fileName.length() - 16) + " [DECRYPTED].txt"; + Path newFilePath = runOptions.getFilePath().resolveSibling(newFileName); + fileManager.write(newFilePath, decryptedContent); + } } catch (Exception e) { System.out.println(e.getMessage()); } diff --git a/src/main/java/ua/com/javarush/gnew/crypto/Cypher.java b/src/main/java/ua/com/javarush/gnew/crypto/Cypher.java index 2b01247..3785b61 100644 --- a/src/main/java/ua/com/javarush/gnew/crypto/Cypher.java +++ b/src/main/java/ua/com/javarush/gnew/crypto/Cypher.java @@ -22,6 +22,10 @@ public String encrypt(String input, int key) { return builder.toString(); } + public String decrypt(String input, int key) { + return encrypt(input, -key); + } + private Character processSymbol(char symbol, ArrayList rotatedAlphabet) { if (!originalAlphabet.contains(symbol)) { return symbol; From e8070161fe983a83f3c6796d2714683da1e696b1 Mon Sep 17 00:00:00 2001 From: Tsaruk Date: Tue, 10 Sep 2024 13:11:49 +0100 Subject: [PATCH 4/9] added bruteForce method --- inputData.txt | 9 +++- src/main/java/ua/com/javarush/gnew/Main.java | 8 ++++ .../ua/com/javarush/gnew/crypto/Cypher.java | 41 +++++++++++++++++-- .../javarush/gnew/runner/ArgumentsParser.java | 2 +- 4 files changed, 54 insertions(+), 6 deletions(-) diff --git a/inputData.txt b/inputData.txt index 8e49d1b..8a42523 100644 --- a/inputData.txt +++ b/inputData.txt @@ -5,4 +5,11 @@ People were slowly closing their shops, exchanging friendly smiles and goodbyes. Children played in the park, their laughter echoing through the air. In the distance, the gentle sound of a river flowing added to the serene atmosphere. A couple walked hand in hand, enjoying the cool evening breeze. -Life in the village was peaceful, with a comforting sense of community that made everyone feel at home. \ No newline at end of file +Life in the village was peaceful, with a comforting sense of community that made everyone feel at home. +In a quiet village nestled between rolling hills and dense forests, life moved at a gentle pace. +Every morning, the sun would rise slowly over the horizon, casting a warm golden glow across the fields. +The villagers, friendly and hardworking, went about their daily routines with a sense of contentment. +Children played near the stream, their laughter echoing through the trees. +Elderly folks shared stories of olden days on the benches under the large oak tree. +As evening approached, the village would gather around the bonfire, enjoying the simple pleasures of life, +and the stars would shine brightly in the clear night sky. \ No newline at end of file diff --git a/src/main/java/ua/com/javarush/gnew/Main.java b/src/main/java/ua/com/javarush/gnew/Main.java index 903bc97..1949bb8 100644 --- a/src/main/java/ua/com/javarush/gnew/Main.java +++ b/src/main/java/ua/com/javarush/gnew/Main.java @@ -34,6 +34,14 @@ public static void main(String[] args) { Path newFilePath = runOptions.getFilePath().resolveSibling(newFileName); fileManager.write(newFilePath, decryptedContent); } + if(runOptions.getCommand()==Command.BRUTEFORCE){ + String content = fileManager.read(runOptions.getFilePath()); + String bruteForceContent= cypher.bruteForce(content); + String fileName = runOptions.getFilePath().getFileName().toString(); + String newFileName = fileName.substring(0, fileName.length() - 16) + " [BRUTEFORCE].txt"; + Path newFilePath = runOptions.getFilePath().resolveSibling(newFileName); + fileManager.write(newFilePath, bruteForceContent); + } } catch (Exception e) { System.out.println(e.getMessage()); } diff --git a/src/main/java/ua/com/javarush/gnew/crypto/Cypher.java b/src/main/java/ua/com/javarush/gnew/crypto/Cypher.java index 3785b61..ac61f00 100644 --- a/src/main/java/ua/com/javarush/gnew/crypto/Cypher.java +++ b/src/main/java/ua/com/javarush/gnew/crypto/Cypher.java @@ -1,15 +1,13 @@ package ua.com.javarush.gnew.crypto; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; +import java.util.*; public class Cypher { private final ArrayList originalAlphabet = new ArrayList<>(Arrays.asList('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z')); public String encrypt(String input, int key) { - key = Math.negateExact(key); + key = -key; ArrayList rotatedAlphabet = new ArrayList<>(originalAlphabet); Collections.rotate(rotatedAlphabet, key); @@ -26,6 +24,41 @@ public String decrypt(String input, int key) { return encrypt(input, -key); } + public String bruteForce(String input) { + int maxCount = 0; + int key = 0; + String bestOutput = ""; + HashSet engWords = new HashSet<>(List.of("are", "not", "am", "get", "do", "the", "be", "and", "to", "of", "have", "you", "at", "for","was")); + + + for (int i = 1; i <= 25; i++) { + ArrayList rotatedAlphabet = new ArrayList<>(originalAlphabet); + Collections.rotate(rotatedAlphabet, i); + char[] charArray = input.toCharArray(); + + StringBuilder builder = new StringBuilder(); + for (char symbol : charArray) { + builder.append(processSymbol(symbol, rotatedAlphabet)); + } + String output = builder.toString(); + + int count = 0; + String[] words = output.split("\\s+"); + for (String word : words) { + if (engWords.contains(word.toLowerCase())) { + count++; + } + } + + if (count > maxCount) { + maxCount = count; + key = i; + bestOutput = output; + } + } + return bestOutput; + } + private Character processSymbol(char symbol, ArrayList rotatedAlphabet) { if (!originalAlphabet.contains(symbol)) { return symbol; diff --git a/src/main/java/ua/com/javarush/gnew/runner/ArgumentsParser.java b/src/main/java/ua/com/javarush/gnew/runner/ArgumentsParser.java index eb42462..9f80c2a 100644 --- a/src/main/java/ua/com/javarush/gnew/runner/ArgumentsParser.java +++ b/src/main/java/ua/com/javarush/gnew/runner/ArgumentsParser.java @@ -48,7 +48,7 @@ public RunOptions parse(String[] args) { throw new IllegalArgumentException("Command (-e, -d, or -bf) is required"); } - if (key == null) { + if (key == null && command!=Command.BRUTEFORCE) { throw new IllegalArgumentException("Key is required for encrypt or decrypt mode"); } From a68162b8948582a94adc90044fccd01acd56a478 Mon Sep 17 00:00:00 2001 From: Tsaruk Date: Thu, 12 Sep 2024 11:07:54 +0100 Subject: [PATCH 5/9] added PathManager --- src/main/java/ua/com/javarush/gnew/Main.java | 22 +++++----------- .../ua/com/javarush/gnew/crypto/Cypher.java | 6 +++-- .../com/javarush/gnew/file/FileManager.java | 19 +++++++++++--- .../com/javarush/gnew/file/PathManager.java | 26 +++++++++++++++++++ 4 files changed, 52 insertions(+), 21 deletions(-) create mode 100644 src/main/java/ua/com/javarush/gnew/file/PathManager.java diff --git a/src/main/java/ua/com/javarush/gnew/Main.java b/src/main/java/ua/com/javarush/gnew/Main.java index 1949bb8..29361e7 100644 --- a/src/main/java/ua/com/javarush/gnew/Main.java +++ b/src/main/java/ua/com/javarush/gnew/Main.java @@ -2,6 +2,7 @@ import ua.com.javarush.gnew.crypto.Cypher; import ua.com.javarush.gnew.file.FileManager; +import ua.com.javarush.gnew.file.PathManager; import ua.com.javarush.gnew.runner.ArgumentsParser; import ua.com.javarush.gnew.runner.Command; import ua.com.javarush.gnew.runner.RunOptions; @@ -15,32 +16,23 @@ public static void main(String[] args) { FileManager fileManager = new FileManager(); ArgumentsParser argumentsParser = new ArgumentsParser(); RunOptions runOptions = argumentsParser.parse(args); + PathManager pathManager = new PathManager(); try { if (runOptions.getCommand() == Command.ENCRYPT) { String content = fileManager.read(runOptions.getFilePath()); String encryptedContent = cypher.encrypt(content, runOptions.getKey()); - String fileName = runOptions.getFilePath().getFileName().toString(); - String newFileName = fileName.substring(0, fileName.length() - 4) + " [ENCRYPTED].txt"; - - Path newFilePath = runOptions.getFilePath().resolveSibling(newFileName); - fileManager.write(newFilePath, encryptedContent); + fileManager.write(pathManager.newFilePath(runOptions), encryptedContent); } if (runOptions.getCommand() == Command.DECRYPT) { String content = fileManager.read(runOptions.getFilePath()); String decryptedContent = cypher.decrypt(content, runOptions.getKey()); - String fileName = runOptions.getFilePath().getFileName().toString(); - String newFileName = fileName.substring(0, fileName.length() - 16) + " [DECRYPTED].txt"; - Path newFilePath = runOptions.getFilePath().resolveSibling(newFileName); - fileManager.write(newFilePath, decryptedContent); + fileManager.write(pathManager.newFilePath(runOptions), decryptedContent); } - if(runOptions.getCommand()==Command.BRUTEFORCE){ + if (runOptions.getCommand() == Command.BRUTEFORCE) { String content = fileManager.read(runOptions.getFilePath()); - String bruteForceContent= cypher.bruteForce(content); - String fileName = runOptions.getFilePath().getFileName().toString(); - String newFileName = fileName.substring(0, fileName.length() - 16) + " [BRUTEFORCE].txt"; - Path newFilePath = runOptions.getFilePath().resolveSibling(newFileName); - fileManager.write(newFilePath, bruteForceContent); + String bruteForceContent = cypher.bruteForce(content); + fileManager.write(pathManager.newFilePath(runOptions), bruteForceContent); } } catch (Exception e) { System.out.println(e.getMessage()); diff --git a/src/main/java/ua/com/javarush/gnew/crypto/Cypher.java b/src/main/java/ua/com/javarush/gnew/crypto/Cypher.java index ac61f00..078b9ed 100644 --- a/src/main/java/ua/com/javarush/gnew/crypto/Cypher.java +++ b/src/main/java/ua/com/javarush/gnew/crypto/Cypher.java @@ -3,6 +3,7 @@ import java.util.*; public class Cypher { + public static int key; private final ArrayList originalAlphabet = new ArrayList<>(Arrays.asList('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z')); @@ -27,8 +28,8 @@ public String decrypt(String input, int key) { public String bruteForce(String input) { int maxCount = 0; int key = 0; - String bestOutput = ""; - HashSet engWords = new HashSet<>(List.of("are", "not", "am", "get", "do", "the", "be", "and", "to", "of", "have", "you", "at", "for","was")); + String bestOutput =""; + HashSet engWords = new HashSet<>(List.of("are", "not", "am", "get", "do", "the", "be", "and", "to", "of", "have", "you", "at", "for", "was")); for (int i = 1; i <= 25; i++) { @@ -56,6 +57,7 @@ public String bruteForce(String input) { bestOutput = output; } } + Cypher.key = key; return bestOutput; } diff --git a/src/main/java/ua/com/javarush/gnew/file/FileManager.java b/src/main/java/ua/com/javarush/gnew/file/FileManager.java index d60744c..4d93614 100644 --- a/src/main/java/ua/com/javarush/gnew/file/FileManager.java +++ b/src/main/java/ua/com/javarush/gnew/file/FileManager.java @@ -1,15 +1,26 @@ package ua.com.javarush.gnew.file; +import ua.com.javarush.gnew.runner.RunOptions; + import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; public class FileManager { - public String read(Path filePath) throws IOException { - return Files.readString(filePath); + + public String read(Path filePath) { + try { + return Files.readString(filePath); + } catch (IOException e) { + throw new RuntimeException(e); + } } - public void write(Path filePath, String content) throws IOException { - Files.writeString(filePath, content); + public void write(Path filePath, String content) { + try { + Files.writeString(filePath, content); + } catch (IOException e) { + throw new RuntimeException(e); + } } } diff --git a/src/main/java/ua/com/javarush/gnew/file/PathManager.java b/src/main/java/ua/com/javarush/gnew/file/PathManager.java new file mode 100644 index 0000000..3eac99e --- /dev/null +++ b/src/main/java/ua/com/javarush/gnew/file/PathManager.java @@ -0,0 +1,26 @@ +package ua.com.javarush.gnew.file; + +import ua.com.javarush.gnew.crypto.Cypher; +import ua.com.javarush.gnew.runner.RunOptions; + +import java.nio.file.Path; + +public class PathManager { + public Path newFilePath(RunOptions runOptions) { + String label = switch (runOptions.getCommand()) { + case ENCRYPT -> " [ENCRYPTED]"; + case DECRYPT -> " [DECRYPTED]"; + case BRUTEFORCE -> " [BRUTEFORCE]"; + default -> null; + }; + + String fileName = runOptions.getFilePath().getFileName().toString(); + StringBuilder newFileName = new StringBuilder(fileName.substring(0, fileName.length() - 4)); + newFileName.append(label); + if (label.equals(" [BRUTEFORCE]")) { + newFileName.append(" key ").append(Cypher.key); + } + newFileName.append(".txt"); + return runOptions.getFilePath().resolveSibling(newFileName.toString()); + } +} From 679989792c57ce4447eb3e1825d3607483078824 Mon Sep 17 00:00:00 2001 From: Roman Date: Thu, 12 Sep 2024 13:11:11 +0100 Subject: [PATCH 6/9] added readme --- readme.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/readme.md b/readme.md index a17a9ac..b46142e 100644 --- a/readme.md +++ b/readme.md @@ -1,3 +1,9 @@ +Вдалося реалізувати базові умови до проекту. +В наступному релізі планую реалізувати ще додаткові завдання. +Домашні завдання після лекцій було легко виконувати, а вот поєднати весь пройдений матеріал в одному проекті вже складніше. +Приходилось трішки гуглити бо пройдений матеріал забувається без постійної практики. +В подальшому з набуттям нових знань думаю перепишу проект і зроблю його набагото вдосконалішим). + ## Run the program From ec36d7b03c518a4db332495483c661f6654add74 Mon Sep 17 00:00:00 2001 From: Roman Date: Thu, 12 Sep 2024 13:20:16 +0100 Subject: [PATCH 7/9] added jar --- META-INF/MANIFEST.MF | 3 +++ out/artifacts/GNEW_M1_FP_jar/GNEW-M1-FP.jar | Bin 0 -> 11138 bytes 2 files changed, 3 insertions(+) create mode 100644 META-INF/MANIFEST.MF create mode 100644 out/artifacts/GNEW_M1_FP_jar/GNEW-M1-FP.jar diff --git a/META-INF/MANIFEST.MF b/META-INF/MANIFEST.MF new file mode 100644 index 0000000..e523bee --- /dev/null +++ b/META-INF/MANIFEST.MF @@ -0,0 +1,3 @@ +Manifest-Version: 1.0 +Main-Class: ua.com.javarush.gnew.Main + diff --git a/out/artifacts/GNEW_M1_FP_jar/GNEW-M1-FP.jar b/out/artifacts/GNEW_M1_FP_jar/GNEW-M1-FP.jar new file mode 100644 index 0000000000000000000000000000000000000000..65c6f75446939ef5d01b2167ab5bf3c1caeae501 GIT binary patch literal 11138 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 K_fD#Zzy2Ra50fwe literal 0 HcmV?d00001 From c74dff6d9a8fbb0a7bdc80f995b31a4c37824499 Mon Sep 17 00:00:00 2001 From: Roman <88970233+RomanTsaruk@users.noreply.github.com> Date: Thu, 12 Sep 2024 13:36:44 +0100 Subject: [PATCH 8/9] Update readme.md --- readme.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/readme.md b/readme.md index b46142e..b47c189 100644 --- a/readme.md +++ b/readme.md @@ -2,7 +2,7 @@ В наступному релізі планую реалізувати ще додаткові завдання. Домашні завдання після лекцій було легко виконувати, а вот поєднати весь пройдений матеріал в одному проекті вже складніше. Приходилось трішки гуглити бо пройдений матеріал забувається без постійної практики. -В подальшому з набуттям нових знань думаю перепишу проект і зроблю його набагото вдосконалішим). +В подальшому з набуттям нових знань думаю перепишу проект і зроблю його набагото досконалішим). ## Run the program @@ -31,4 +31,4 @@ ### Argument could be in any order ``` -e -f "/path/to/file.txt" -k 1 -``` \ No newline at end of file +``` From 2372f925f309566264f37302eb03147ebaf0cd99 Mon Sep 17 00:00:00 2001 From: Roman Date: Thu, 17 Oct 2024 14:49:08 +0300 Subject: [PATCH 9/9] removed unused lines --- src/main/java/ua/com/javarush/gnew/Main.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/ua/com/javarush/gnew/Main.java b/src/main/java/ua/com/javarush/gnew/Main.java index 29361e7..0e31ae0 100644 --- a/src/main/java/ua/com/javarush/gnew/Main.java +++ b/src/main/java/ua/com/javarush/gnew/Main.java @@ -7,7 +7,6 @@ import ua.com.javarush.gnew.runner.Command; import ua.com.javarush.gnew.runner.RunOptions; -import java.nio.file.Path; public class Main { //start a project