From 1e9fc767fceff46e76f5845c98077bfe615f285c Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Sat, 24 Aug 2024 17:42:22 +0300 Subject: [PATCH 01/41] change readme.md --- readme.md | 42 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/readme.md b/readme.md index a17a9ac..438afaa 100644 --- a/readme.md +++ b/readme.md @@ -1,7 +1,10 @@ +# CAESAR CIPHER +author Serhii Lahuta -## Run the program +# ENGLISH +### Run the program -### Commands: +#### Commands: ``` -e Encrypt @@ -9,20 +12,49 @@ -bf Brute force ``` -### Arguments: +#### Arguments: ``` -k Key -f File path ``` -### Example: +#### Example: ``` -e -k 1 -f "/path/to/file.txt" - Encrypt file with key 1 -d -k 5 -f "/path/to/file [ENCRYPTED].txt" - Decrypt file with key 5 -bf -f "/path/to/file [ENCRYPTED].txt" - Brute force decrypt file ``` -### Argument could be in any order +#### Argument could be in any order +``` +-e -f "/path/to/file.txt" -k 1 +``` + +# УКРАЇНСЬКА +### Запуск програми + +#### Команди: + +``` +-e Зашифрувани +-d Розшифрувати +-bf Підбір коду +``` + +#### Аргуметни: +``` +-k Ключ +-f Шлях до файлу +``` + +#### Приклад: +``` +-e -k 1 -f "/path/to/file.txt" - Зашифрувати файл з ключем 1 +-d -k 5 -f "/path/to/file [ENCRYPTED].txt" - Розшифрувати файл з ключем 5 +-bf -f "/path/to/file [ENCRYPTED].txt" - Розшифрувати файл методом підбору ключа +``` + +#### Аргументи можуть бути у будь-якому порядку ``` -e -f "/path/to/file.txt" -k 1 ``` \ No newline at end of file From 73acc24ac3d4aa603f40f90089d97fe85cdb626f Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Sat, 24 Aug 2024 17:42:22 +0300 Subject: [PATCH 02/41] change readme.md --- readme.md | 42 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/readme.md b/readme.md index a17a9ac..f9c4867 100644 --- a/readme.md +++ b/readme.md @@ -1,7 +1,10 @@ +# CAESAR CIPHER +author Serhii Lahuta -## Run the program +# ENGLISH +### Run the program -### Commands: +#### Commands: ``` -e Encrypt @@ -9,20 +12,49 @@ -bf Brute force ``` -### Arguments: +#### Arguments: ``` -k Key -f File path ``` -### Example: +#### Example: ``` -e -k 1 -f "/path/to/file.txt" - Encrypt file with key 1 -d -k 5 -f "/path/to/file [ENCRYPTED].txt" - Decrypt file with key 5 -bf -f "/path/to/file [ENCRYPTED].txt" - Brute force decrypt file ``` -### Argument could be in any order +#### Argument could be in any order +``` +-e -f "/path/to/file.txt" -k 1 +``` + +# УКРАЇНСЬКА +### Запуск програми + +#### Команди: + +``` +-e Зашифрувати +-d Розшифрувати +-bf Підбір коду +``` + +#### Аргуметни: +``` +-k Ключ +-f Шлях до файлу +``` + +#### Приклад: +``` +-e -k 1 -f "/path/to/file.txt" - Зашифрувати файл з ключем 1 +-d -k 5 -f "/path/to/file [ENCRYPTED].txt" - Розшифрувати файл з ключем 5 +-bf -f "/path/to/file [ENCRYPTED].txt" - Розшифрувати файл методом підбору ключа +``` + +#### Аргументи можуть бути у будь-якому порядку ``` -e -f "/path/to/file.txt" -k 1 ``` \ No newline at end of file From a5e36558f2069f150584246ce4725a152b109ca4 Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Tue, 27 Aug 2024 00:59:29 +0300 Subject: [PATCH 03/41] Added Enum Alphabet --- .../ua/com/javarush/gnew/crypto/Alphabet.java | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/main/java/ua/com/javarush/gnew/crypto/Alphabet.java diff --git a/src/main/java/ua/com/javarush/gnew/crypto/Alphabet.java b/src/main/java/ua/com/javarush/gnew/crypto/Alphabet.java new file mode 100644 index 0000000..5bde6f2 --- /dev/null +++ b/src/main/java/ua/com/javarush/gnew/crypto/Alphabet.java @@ -0,0 +1,21 @@ +package ua.com.javarush.gnew.crypto; + +import java.util.ArrayList; +import java.util.Arrays; + +public enum Alphabet { + ABC(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'))); + + private final ArrayList charsAlphabet; + + Alphabet(ArrayList charsAlphabet) { + this.charsAlphabet = charsAlphabet; + } + + public ArrayList getAlphabet() { + return this.charsAlphabet; + } + +} From f5bae0d7532bf68bda2cec7b230a41b418a2ab84 Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Tue, 27 Aug 2024 01:00:56 +0300 Subject: [PATCH 04/41] Added class Encrypt.java --- .../ua/com/javarush/gnew/crypto/Cypher.java | 33 --------------- .../ua/com/javarush/gnew/crypto/Encrypt.java | 40 +++++++++++++++++++ 2 files changed, 40 insertions(+), 33 deletions(-) delete mode 100644 src/main/java/ua/com/javarush/gnew/crypto/Cypher.java create mode 100644 src/main/java/ua/com/javarush/gnew/crypto/Encrypt.java diff --git a/src/main/java/ua/com/javarush/gnew/crypto/Cypher.java b/src/main/java/ua/com/javarush/gnew/crypto/Cypher.java deleted file mode 100644 index 2b01247..0000000 --- a/src/main/java/ua/com/javarush/gnew/crypto/Cypher.java +++ /dev/null @@ -1,33 +0,0 @@ -package ua.com.javarush.gnew.crypto; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; - -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); - - ArrayList rotatedAlphabet = new ArrayList<>(originalAlphabet); - Collections.rotate(rotatedAlphabet, key); - char[] charArray = input.toCharArray(); - - StringBuilder builder = new StringBuilder(); - for (char symbol : charArray) { - builder.append(processSymbol(symbol, rotatedAlphabet)); - } - return builder.toString(); - } - - private Character processSymbol(char symbol, ArrayList rotatedAlphabet) { - if (!originalAlphabet.contains(symbol)) { - return symbol; - } - int index = originalAlphabet.indexOf(symbol); - - return rotatedAlphabet.get(index); - } -} diff --git a/src/main/java/ua/com/javarush/gnew/crypto/Encrypt.java b/src/main/java/ua/com/javarush/gnew/crypto/Encrypt.java new file mode 100644 index 0000000..be1f9ff --- /dev/null +++ b/src/main/java/ua/com/javarush/gnew/crypto/Encrypt.java @@ -0,0 +1,40 @@ +package ua.com.javarush.gnew.crypto; + +import java.util.ArrayList; +import java.util.Collections; + +public class Encrypt { + public Encrypt() { + } + + public String encrypt(String input, int key) { + if (key % 26 ==0) { + key = 7 ; + } + key = (key % 26) * -1; + System.out.println( key); + + ArrayList rotateAlphabet = new ArrayList(Alphabet.ABC.getAlphabet()); + Collections.rotate(rotateAlphabet, key); + char[] charsArray = input.toCharArray(); + + StringBuilder sb = new StringBuilder(); + + for(char symbol : charsArray) { + sb.append(this.symbolsBelongingAlphabet(symbol, rotateAlphabet)); + } + + return sb.toString(); + } + + protected Character symbolsBelongingAlphabet(char symbol, ArrayList rotateAlphabet) { + if (!Alphabet.ABC.getAlphabet().contains(Character.toUpperCase(symbol))) { + return symbol; + } + int index = Alphabet.ABC.getAlphabet().indexOf(Character.toUpperCase(symbol)); + if(Character.isLowerCase(symbol)){ + return Character.toLowerCase(rotateAlphabet.get(index)); + } + return rotateAlphabet.get(index); + } +} \ No newline at end of file From 0f84392f77e052c2fe291349e7e67935d64385af Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Tue, 27 Aug 2024 01:01:42 +0300 Subject: [PATCH 05/41] Added class Decrypt.java --- .../ua/com/javarush/gnew/crypto/Decrypt.java | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 src/main/java/ua/com/javarush/gnew/crypto/Decrypt.java diff --git a/src/main/java/ua/com/javarush/gnew/crypto/Decrypt.java b/src/main/java/ua/com/javarush/gnew/crypto/Decrypt.java new file mode 100644 index 0000000..a17fba5 --- /dev/null +++ b/src/main/java/ua/com/javarush/gnew/crypto/Decrypt.java @@ -0,0 +1,29 @@ +package ua.com.javarush.gnew.crypto; + +import java.util.ArrayList; +import java.util.Collections; + +public class Decrypt { + public Decrypt() { + } + + public String decrypt(String input, int key) { + if (key % 26 ==0) { + key = 7 ; + } + key = (key % 26); + + ArrayList rotateAlphabet = new ArrayList(Alphabet.ABC.getAlphabet()); + Collections.rotate(rotateAlphabet, key); + + char[] charsArray = input.toCharArray(); + + StringBuilder sb = new StringBuilder(); + Encrypt enc = new Encrypt(); + for(char symbol : charsArray) { + sb.append(enc.symbolsBelongingAlphabet(symbol, rotateAlphabet)); + } + return sb.toString(); + } + +} From 3f70aa790ead058a5af771cd431123ef64297c05 Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Tue, 27 Aug 2024 01:03:22 +0300 Subject: [PATCH 06/41] changed Main.java for quick check --- src/main/java/ua/com/javarush/gnew/Main.java | 42 +++++++++++--------- 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/src/main/java/ua/com/javarush/gnew/Main.java b/src/main/java/ua/com/javarush/gnew/Main.java index 5906828..8f18b9f 100644 --- a/src/main/java/ua/com/javarush/gnew/Main.java +++ b/src/main/java/ua/com/javarush/gnew/Main.java @@ -1,6 +1,7 @@ package ua.com.javarush.gnew; -import ua.com.javarush.gnew.crypto.Cypher; +import ua.com.javarush.gnew.crypto.Decrypt; +import ua.com.javarush.gnew.crypto.Encrypt; import ua.com.javarush.gnew.file.FileManager; import ua.com.javarush.gnew.runner.ArgumentsParser; import ua.com.javarush.gnew.runner.Command; @@ -10,23 +11,28 @@ public class Main { public static void main(String[] args) { - Cypher cypher = new Cypher(); - FileManager fileManager = new FileManager(); - ArgumentsParser argumentsParser = new ArgumentsParser(); - RunOptions runOptions = argumentsParser.parse(args); + Encrypt cipher = new Encrypt(); + System.out.println(cipher.encrypt("Abc abC", 0)); + Decrypt encripted = new Decrypt(); + System.out.println(encripted.decrypt("Hij hiJ", 0)); +// Encrypt cypher = new Encrypt(); +// FileManager fileManager = new FileManager(); +// ArgumentsParser argumentsParser = new ArgumentsParser(); +// RunOptions runOptions = argumentsParser.parse(args); +// +// 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); +// } +// } catch (Exception e) { +// System.out.println(e.getMessage()); +// } - 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); - } - } catch (Exception e) { - System.out.println(e.getMessage()); - } } } \ No newline at end of file From 4a9bb0aeb0272c80a377fa93960108700652f761 Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Tue, 27 Aug 2024 01:17:03 +0300 Subject: [PATCH 07/41] add to Enum Alphabet another element --- src/main/java/ua/com/javarush/gnew/crypto/Alphabet.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/main/java/ua/com/javarush/gnew/crypto/Alphabet.java b/src/main/java/ua/com/javarush/gnew/crypto/Alphabet.java index 5bde6f2..706a693 100644 --- a/src/main/java/ua/com/javarush/gnew/crypto/Alphabet.java +++ b/src/main/java/ua/com/javarush/gnew/crypto/Alphabet.java @@ -4,9 +4,12 @@ import java.util.Arrays; public enum Alphabet { - ABC(new ArrayList<>(Arrays.asList('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', + ABC (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'))); + 'X', 'Y', 'Z'))), + PUNCTUATION (new ArrayList<>(Arrays.asList('.', ',', '!', '?', ':', ';', '-', + '(', ')', '[', ']', '{', '}','#', ' ', '@', '*', '+', '=', '_', '&', + '\\', '/', '₴', '~', '`'))); private final ArrayList charsAlphabet; From f1d2963ed23d3f9647465db5c17005bcda1ca133 Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Tue, 27 Aug 2024 01:36:44 +0300 Subject: [PATCH 08/41] deleted constructor in Decrypt.java and Encrypt.java --- src/main/java/ua/com/javarush/gnew/crypto/Decrypt.java | 2 -- src/main/java/ua/com/javarush/gnew/crypto/Encrypt.java | 5 +---- 2 files changed, 1 insertion(+), 6 deletions(-) diff --git a/src/main/java/ua/com/javarush/gnew/crypto/Decrypt.java b/src/main/java/ua/com/javarush/gnew/crypto/Decrypt.java index a17fba5..ea6088d 100644 --- a/src/main/java/ua/com/javarush/gnew/crypto/Decrypt.java +++ b/src/main/java/ua/com/javarush/gnew/crypto/Decrypt.java @@ -4,8 +4,6 @@ import java.util.Collections; public class Decrypt { - public Decrypt() { - } public String decrypt(String input, int key) { if (key % 26 ==0) { diff --git a/src/main/java/ua/com/javarush/gnew/crypto/Encrypt.java b/src/main/java/ua/com/javarush/gnew/crypto/Encrypt.java index be1f9ff..2342e6f 100644 --- a/src/main/java/ua/com/javarush/gnew/crypto/Encrypt.java +++ b/src/main/java/ua/com/javarush/gnew/crypto/Encrypt.java @@ -4,8 +4,6 @@ import java.util.Collections; public class Encrypt { - public Encrypt() { - } public String encrypt(String input, int key) { if (key % 26 ==0) { @@ -14,12 +12,11 @@ public String encrypt(String input, int key) { key = (key % 26) * -1; System.out.println( key); - ArrayList rotateAlphabet = new ArrayList(Alphabet.ABC.getAlphabet()); + ArrayList rotateAlphabet = new ArrayList<>(Alphabet.ABC.getAlphabet()); Collections.rotate(rotateAlphabet, key); char[] charsArray = input.toCharArray(); StringBuilder sb = new StringBuilder(); - for(char symbol : charsArray) { sb.append(this.symbolsBelongingAlphabet(symbol, rotateAlphabet)); } From 1fcb116227c7ac818198ed1a3f2d229769911b44 Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Tue, 27 Aug 2024 18:59:48 +0300 Subject: [PATCH 09/41] rename ENUM Alphabet.java to ConstantsForCipher.java --- .../{Alphabet.java => ConstantsForCipher.java} | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) rename src/main/java/ua/com/javarush/gnew/crypto/{Alphabet.java => ConstantsForCipher.java} (51%) diff --git a/src/main/java/ua/com/javarush/gnew/crypto/Alphabet.java b/src/main/java/ua/com/javarush/gnew/crypto/ConstantsForCipher.java similarity index 51% rename from src/main/java/ua/com/javarush/gnew/crypto/Alphabet.java rename to src/main/java/ua/com/javarush/gnew/crypto/ConstantsForCipher.java index 706a693..12dd705 100644 --- a/src/main/java/ua/com/javarush/gnew/crypto/Alphabet.java +++ b/src/main/java/ua/com/javarush/gnew/crypto/ConstantsForCipher.java @@ -3,22 +3,20 @@ import java.util.ArrayList; import java.util.Arrays; -public enum Alphabet { - ABC (new ArrayList<>(Arrays.asList('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', +public enum ConstantsForCipher { + ALPHABET(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'))), PUNCTUATION (new ArrayList<>(Arrays.asList('.', ',', '!', '?', ':', ';', '-', '(', ')', '[', ']', '{', '}','#', ' ', '@', '*', '+', '=', '_', '&', '\\', '/', '₴', '~', '`'))); - private final ArrayList charsAlphabet; + private final ArrayList CharsArrayConstants; - Alphabet(ArrayList charsAlphabet) { - this.charsAlphabet = charsAlphabet; + ConstantsForCipher(ArrayList CharsArrayConstants) { + this.CharsArrayConstants = CharsArrayConstants; } - - public ArrayList getAlphabet() { - return this.charsAlphabet; + public ArrayList getCharsArrayConstants() { + return this.CharsArrayConstants; } - } From 394dc8eb2189ca5dde0a97c296d92da02a76b14d Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Tue, 27 Aug 2024 19:03:34 +0300 Subject: [PATCH 10/41] finalise class Decrypt.java (cheng all methods) --- .../java/ua/com/javarush/gnew/crypto/Decrypt.java | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/main/java/ua/com/javarush/gnew/crypto/Decrypt.java b/src/main/java/ua/com/javarush/gnew/crypto/Decrypt.java index ea6088d..10fffbf 100644 --- a/src/main/java/ua/com/javarush/gnew/crypto/Decrypt.java +++ b/src/main/java/ua/com/javarush/gnew/crypto/Decrypt.java @@ -11,17 +11,24 @@ public String decrypt(String input, int key) { } key = (key % 26); - ArrayList rotateAlphabet = new ArrayList(Alphabet.ABC.getAlphabet()); + ArrayList rotateAlphabet = new ArrayList<>(ConstantsForCipher.ALPHABET.getCharsArrayConstants()); Collections.rotate(rotateAlphabet, key); + ArrayList rotatePunctuation = new ArrayList<>(ConstantsForCipher.PUNCTUATION.getCharsArrayConstants()); + Collections.rotate(rotatePunctuation, key); char[] charsArray = input.toCharArray(); StringBuilder sb = new StringBuilder(); Encrypt enc = new Encrypt(); for(char symbol : charsArray) { - sb.append(enc.symbolsBelongingAlphabet(symbol, rotateAlphabet)); + if(ConstantsForCipher.ALPHABET.getCharsArrayConstants().contains(Character.toUpperCase(symbol))){ + sb.append(enc.symbolsBelongingABC(symbol, rotateAlphabet)); + } else if (ConstantsForCipher.PUNCTUATION.getCharsArrayConstants().contains(symbol)) { + sb.append(enc.symbolsBelongingPUNCTUATION(symbol, rotatePunctuation)); + }else { + sb.append(symbol); + } } return sb.toString(); } - } From 7cbaed98a2586d6a20c309ba757ea9398e050bf9 Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Tue, 27 Aug 2024 19:04:08 +0300 Subject: [PATCH 11/41] finalise class Encrypt.java (cheng all methods) --- .../ua/com/javarush/gnew/crypto/Encrypt.java | 26 +++++++++++++------ 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/src/main/java/ua/com/javarush/gnew/crypto/Encrypt.java b/src/main/java/ua/com/javarush/gnew/crypto/Encrypt.java index 2342e6f..e80c431 100644 --- a/src/main/java/ua/com/javarush/gnew/crypto/Encrypt.java +++ b/src/main/java/ua/com/javarush/gnew/crypto/Encrypt.java @@ -10,28 +10,38 @@ public String encrypt(String input, int key) { key = 7 ; } key = (key % 26) * -1; - System.out.println( key); - ArrayList rotateAlphabet = new ArrayList<>(Alphabet.ABC.getAlphabet()); + ArrayList rotateAlphabet = new ArrayList<>(ConstantsForCipher.ALPHABET.getCharsArrayConstants()); Collections.rotate(rotateAlphabet, key); + ArrayList rotatePunctuation= new ArrayList<>(ConstantsForCipher.PUNCTUATION.getCharsArrayConstants()); + Collections.rotate(rotatePunctuation, key); + char[] charsArray = input.toCharArray(); StringBuilder sb = new StringBuilder(); for(char symbol : charsArray) { - sb.append(this.symbolsBelongingAlphabet(symbol, rotateAlphabet)); + if (ConstantsForCipher.ALPHABET.getCharsArrayConstants().contains(Character.toUpperCase(symbol))){ + sb.append(symbolsBelongingABC(symbol, rotateAlphabet)); + } else if (ConstantsForCipher.PUNCTUATION.getCharsArrayConstants().contains(symbol)) { + sb.append(symbolsBelongingPUNCTUATION(symbol, rotatePunctuation)); + }else { + sb.append(symbol); + } } return sb.toString(); } - protected Character symbolsBelongingAlphabet(char symbol, ArrayList rotateAlphabet) { - if (!Alphabet.ABC.getAlphabet().contains(Character.toUpperCase(symbol))) { - return symbol; - } - int index = Alphabet.ABC.getAlphabet().indexOf(Character.toUpperCase(symbol)); + protected Character symbolsBelongingABC(char symbol, ArrayList rotateAlphabet) { + int index = ConstantsForCipher.ALPHABET.getCharsArrayConstants().indexOf(Character.toUpperCase(symbol)); if(Character.isLowerCase(symbol)){ return Character.toLowerCase(rotateAlphabet.get(index)); } return rotateAlphabet.get(index); } + + protected Character symbolsBelongingPUNCTUATION(char symbol, ArrayList rotatePunctuation){ + int index = ConstantsForCipher.PUNCTUATION.getCharsArrayConstants().indexOf(symbol); + return rotatePunctuation.get(index); + } } \ No newline at end of file From 11f85e148c8659486e9163426441f00f3681d9ff Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Fri, 30 Aug 2024 15:41:05 +0300 Subject: [PATCH 12/41] add class Cipher.java --- .../ua/com/javarush/gnew/crypto/Cipher.java | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 src/main/java/ua/com/javarush/gnew/crypto/Cipher.java diff --git a/src/main/java/ua/com/javarush/gnew/crypto/Cipher.java b/src/main/java/ua/com/javarush/gnew/crypto/Cipher.java new file mode 100644 index 0000000..a8460aa --- /dev/null +++ b/src/main/java/ua/com/javarush/gnew/crypto/Cipher.java @@ -0,0 +1,35 @@ +package ua.com.javarush.gnew.crypto; + +import ua.com.javarush.gnew.runner.RunOptions; + +import java.util.ArrayList; +import java.util.Collections; + +public class Cipher { + private char[] inputChars; + private ArrayList rotateAlphabet; + private ArrayList rotatePunctuation; + + public char[] inputChars(String input){ + KeyManager keyManager = new KeyManager(); + + rotateAlphabet = ConstantsForCipher.ALPHABET.getCharsArrayConstants(); + Collections.rotate(rotateAlphabet, keyManager.key); + rotatePunctuation = new ArrayList<>(ConstantsForCipher.PUNCTUATION.getCharsArrayConstants()); + Collections.rotate(rotatePunctuation, keyManager.key); + + return input.toCharArray(); + } + + public char[] getInputChars() { + return inputChars; + } + + public ArrayList getRotateAlphabet() { + return rotateAlphabet; + } + + public ArrayList getRotatePunctuation() { + return rotatePunctuation; + } +} From 8e8802b21c485e114bb24661ec459f3015af21d9 Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Fri, 30 Aug 2024 15:41:39 +0300 Subject: [PATCH 13/41] add class KeyManager.java --- .../com/javarush/gnew/crypto/KeyManager.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 src/main/java/ua/com/javarush/gnew/crypto/KeyManager.java diff --git a/src/main/java/ua/com/javarush/gnew/crypto/KeyManager.java b/src/main/java/ua/com/javarush/gnew/crypto/KeyManager.java new file mode 100644 index 0000000..37219e4 --- /dev/null +++ b/src/main/java/ua/com/javarush/gnew/crypto/KeyManager.java @@ -0,0 +1,25 @@ +package ua.com.javarush.gnew.crypto; + +import ua.com.javarush.gnew.runner.Command; +import ua.com.javarush.gnew.runner.RunOptions; + +public class KeyManager { + protected int key; + + public Integer key(RunOptions runOptions){ + if (runOptions.getCommand() == Command.ENCRYPT && runOptions.getKey() >0) { + key = (runOptions.getKey() % 26) * -1; + return key; + }else if (runOptions.getCommand() == Command.DECRYPT && runOptions.getKey() < 0){ + key = (runOptions.getKey() % 26) * -1; + return key; + + }else if ((runOptions.getKey() % 26) == 0){ + key =7; + return runOptions.getCommand() == Command.ENCRYPT ? -key : key; + } + key = runOptions.getKey(); + return key; + } +} + From 22e85c0dbb2587aec22509b275a43d757d50e212 Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Fri, 30 Aug 2024 15:42:18 +0300 Subject: [PATCH 14/41] add class SymbolsBelonging.java --- .../gnew/crypto/SymbolsBelonging.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 src/main/java/ua/com/javarush/gnew/crypto/SymbolsBelonging.java diff --git a/src/main/java/ua/com/javarush/gnew/crypto/SymbolsBelonging.java b/src/main/java/ua/com/javarush/gnew/crypto/SymbolsBelonging.java new file mode 100644 index 0000000..eb828a1 --- /dev/null +++ b/src/main/java/ua/com/javarush/gnew/crypto/SymbolsBelonging.java @@ -0,0 +1,19 @@ +package ua.com.javarush.gnew.crypto; + +import java.util.ArrayList; + +public class SymbolsBelonging { + + protected Character symbolsBelongingABC(char symbol, ArrayList rotateAlphabet) { + int index = ConstantsForCipher.ALPHABET.getCharsArrayConstants().indexOf(Character.toUpperCase(symbol)); + if(Character.isLowerCase(symbol)){ + return Character.toLowerCase(rotateAlphabet.get(index)); + } + return rotateAlphabet.get(index); + } + + protected Character symbolsBelongingPUNCTUATION(char symbol, ArrayList rotatePunctuation){ + int index = ConstantsForCipher.PUNCTUATION.getCharsArrayConstants().indexOf(symbol); + return rotatePunctuation.get(index); + } +} From a38b2839a7fe05191980e7a982ea07cce59feb60 Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Fri, 30 Aug 2024 15:43:29 +0300 Subject: [PATCH 15/41] change class Decrypt.java --- src/main/java/ua/com/javarush/gnew/crypto/Decrypt.java | 8 ++++---- src/main/java/ua/com/javarush/gnew/runner/RunOptions.java | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/ua/com/javarush/gnew/crypto/Decrypt.java b/src/main/java/ua/com/javarush/gnew/crypto/Decrypt.java index 10fffbf..fc6f401 100644 --- a/src/main/java/ua/com/javarush/gnew/crypto/Decrypt.java +++ b/src/main/java/ua/com/javarush/gnew/crypto/Decrypt.java @@ -3,7 +3,7 @@ import java.util.ArrayList; import java.util.Collections; -public class Decrypt { +public class Decrypt { public String decrypt(String input, int key) { if (key % 26 ==0) { @@ -19,12 +19,12 @@ public String decrypt(String input, int key) { char[] charsArray = input.toCharArray(); StringBuilder sb = new StringBuilder(); - Encrypt enc = new Encrypt(); + SymbolsBelonging symBel = new SymbolsBelonging(); for(char symbol : charsArray) { if(ConstantsForCipher.ALPHABET.getCharsArrayConstants().contains(Character.toUpperCase(symbol))){ - sb.append(enc.symbolsBelongingABC(symbol, rotateAlphabet)); + sb.append(symBel.symbolsBelongingABC(symbol, rotateAlphabet)); } else if (ConstantsForCipher.PUNCTUATION.getCharsArrayConstants().contains(symbol)) { - sb.append(enc.symbolsBelongingPUNCTUATION(symbol, rotatePunctuation)); + sb.append(symBel.symbolsBelongingPUNCTUATION(symbol, rotatePunctuation)); }else { sb.append(symbol); } diff --git a/src/main/java/ua/com/javarush/gnew/runner/RunOptions.java b/src/main/java/ua/com/javarush/gnew/runner/RunOptions.java index 45e700b..99fd2c5 100644 --- a/src/main/java/ua/com/javarush/gnew/runner/RunOptions.java +++ b/src/main/java/ua/com/javarush/gnew/runner/RunOptions.java @@ -7,7 +7,7 @@ public class RunOptions { * Command to be executed. * -e option for encryption. * -d option for decryption. - * -b option for brute force. + * -bf option for brute force. */ private final Command command; From 088a0adc665c94e2b57befe37998a907f166e305 Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Fri, 30 Aug 2024 15:44:16 +0300 Subject: [PATCH 16/41] change class Encrypt.java --- .../ua/com/javarush/gnew/crypto/Encrypt.java | 35 ++++--------------- 1 file changed, 7 insertions(+), 28 deletions(-) diff --git a/src/main/java/ua/com/javarush/gnew/crypto/Encrypt.java b/src/main/java/ua/com/javarush/gnew/crypto/Encrypt.java index e80c431..694544b 100644 --- a/src/main/java/ua/com/javarush/gnew/crypto/Encrypt.java +++ b/src/main/java/ua/com/javarush/gnew/crypto/Encrypt.java @@ -1,29 +1,20 @@ package ua.com.javarush.gnew.crypto; -import java.util.ArrayList; -import java.util.Collections; +public class Encrypt extends Cipher { -public class Encrypt { + Cipher cipher = new Cipher(); - public String encrypt(String input, int key) { - if (key % 26 ==0) { - key = 7 ; - } - key = (key % 26) * -1; - ArrayList rotateAlphabet = new ArrayList<>(ConstantsForCipher.ALPHABET.getCharsArrayConstants()); - Collections.rotate(rotateAlphabet, key); - ArrayList rotatePunctuation= new ArrayList<>(ConstantsForCipher.PUNCTUATION.getCharsArrayConstants()); - Collections.rotate(rotatePunctuation, key); + public String encrypt() { - char[] charsArray = input.toCharArray(); StringBuilder sb = new StringBuilder(); - for(char symbol : charsArray) { + SymbolsBelonging symBel = new SymbolsBelonging(); + for(char symbol : cipher.getInputChars()) { if (ConstantsForCipher.ALPHABET.getCharsArrayConstants().contains(Character.toUpperCase(symbol))){ - sb.append(symbolsBelongingABC(symbol, rotateAlphabet)); + sb.append(symBel.symbolsBelongingABC(symbol, cipher.getRotateAlphabet())); } else if (ConstantsForCipher.PUNCTUATION.getCharsArrayConstants().contains(symbol)) { - sb.append(symbolsBelongingPUNCTUATION(symbol, rotatePunctuation)); + sb.append(symBel.symbolsBelongingPUNCTUATION(symbol, cipher.getRotatePunctuation())); }else { sb.append(symbol); } @@ -32,16 +23,4 @@ public String encrypt(String input, int key) { return sb.toString(); } - protected Character symbolsBelongingABC(char symbol, ArrayList rotateAlphabet) { - int index = ConstantsForCipher.ALPHABET.getCharsArrayConstants().indexOf(Character.toUpperCase(symbol)); - if(Character.isLowerCase(symbol)){ - return Character.toLowerCase(rotateAlphabet.get(index)); - } - return rotateAlphabet.get(index); - } - - protected Character symbolsBelongingPUNCTUATION(char symbol, ArrayList rotatePunctuation){ - int index = ConstantsForCipher.PUNCTUATION.getCharsArrayConstants().indexOf(symbol); - return rotatePunctuation.get(index); - } } \ No newline at end of file From a0b615e3f5fccb9ae074c86db3ca56a8526b3b71 Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Fri, 30 Aug 2024 15:45:44 +0300 Subject: [PATCH 17/41] change class Main.java --- src/main/java/ua/com/javarush/gnew/Main.java | 47 +++++++++++--------- 1 file changed, 25 insertions(+), 22 deletions(-) diff --git a/src/main/java/ua/com/javarush/gnew/Main.java b/src/main/java/ua/com/javarush/gnew/Main.java index 8f18b9f..b4e7b7d 100644 --- a/src/main/java/ua/com/javarush/gnew/Main.java +++ b/src/main/java/ua/com/javarush/gnew/Main.java @@ -1,7 +1,9 @@ package ua.com.javarush.gnew; +import ua.com.javarush.gnew.crypto.Cipher; import ua.com.javarush.gnew.crypto.Decrypt; import ua.com.javarush.gnew.crypto.Encrypt; +import ua.com.javarush.gnew.crypto.KeyManager; import ua.com.javarush.gnew.file.FileManager; import ua.com.javarush.gnew.runner.ArgumentsParser; import ua.com.javarush.gnew.runner.Command; @@ -11,28 +13,29 @@ public class Main { public static void main(String[] args) { - Encrypt cipher = new Encrypt(); - System.out.println(cipher.encrypt("Abc abC", 0)); - Decrypt encripted = new Decrypt(); - System.out.println(encripted.decrypt("Hij hiJ", 0)); -// Encrypt cypher = new Encrypt(); -// FileManager fileManager = new FileManager(); -// ArgumentsParser argumentsParser = new ArgumentsParser(); -// RunOptions runOptions = argumentsParser.parse(args); -// -// 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); -// } -// } catch (Exception e) { -// System.out.println(e.getMessage()); -// } + Encrypt encrypt = new Encrypt(); + Cipher cipher = new Cipher(); + KeyManager keyManager = new KeyManager(); + FileManager fileManager = new FileManager(); + ArgumentsParser argumentsParser = new ArgumentsParser(); + RunOptions runOptions = argumentsParser.parse(args); + + + try { + if (runOptions.getCommand() == Command.ENCRYPT) { + String content = fileManager.read(runOptions.getFilePath()); + int k = keyManager.key(runOptions); + char [] inputChar = cipher.inputChars(content); + String encryptedContent = encrypt.encrypt(); + 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); + } + } catch (Exception e) { + System.out.println(e.getMessage()); + } } } \ No newline at end of file From 0b55418788fae625af6f507ca6ee13bad8c4a74f Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Fri, 30 Aug 2024 15:46:53 +0300 Subject: [PATCH 18/41] change class FileManager.java --- .../ua/com/javarush/gnew/file/FileManager.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) 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..3602c0c 100644 --- a/src/main/java/ua/com/javarush/gnew/file/FileManager.java +++ b/src/main/java/ua/com/javarush/gnew/file/FileManager.java @@ -5,11 +5,19 @@ 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("File path not found." + e); + } } public void write(Path filePath, String content) throws IOException { - Files.writeString(filePath, content); + try { + Files.writeString(filePath, content); + }catch (IOException e) { + throw new IOException("The file cloud not be saved " + e); + } } } From ff5bc0fefb8dde57a4666138db370091b067eb5e Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Sun, 1 Sep 2024 22:09:45 +0300 Subject: [PATCH 19/41] create class KeyManager.java --- .../com/javarush/gnew/crypto/KeyManager.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/main/java/ua/com/javarush/gnew/crypto/KeyManager.java diff --git a/src/main/java/ua/com/javarush/gnew/crypto/KeyManager.java b/src/main/java/ua/com/javarush/gnew/crypto/KeyManager.java new file mode 100644 index 0000000..afdf43c --- /dev/null +++ b/src/main/java/ua/com/javarush/gnew/crypto/KeyManager.java @@ -0,0 +1,24 @@ +package ua.com.javarush.gnew.crypto; + +import ua.com.javarush.gnew.runner.RunOptions; +import ua.com.javarush.gnew.runner.Command; + + +public class KeyManager { + private Integer key; + public Integer key(RunOptions runOptions){ + if (runOptions.getCommand() == Command.ENCRYPT && runOptions.getKey() >0) { + key = (runOptions.getKey() % 26) * -1; + return key; + }else if (runOptions.getCommand() == Command.DECRYPT && runOptions.getKey() < 0){ + key = (runOptions.getKey() % 26) * -1; + return key; + + }else if ((runOptions.getKey() % 26) == 0){ + key =7; + return runOptions.getCommand() == Command.ENCRYPT ? -key : key; + } + key = runOptions.getKey(); + return key; + } +} From 5fdc378ed6ebc0167adf5905c17a89d310500deb Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Sun, 1 Sep 2024 22:59:54 +0300 Subject: [PATCH 20/41] create class Cryptor.java delete classes Encrypt.java and Decrypt.java --- .../ua/com/javarush/gnew/crypto/Cryptor.java | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 src/main/java/ua/com/javarush/gnew/crypto/Cryptor.java diff --git a/src/main/java/ua/com/javarush/gnew/crypto/Cryptor.java b/src/main/java/ua/com/javarush/gnew/crypto/Cryptor.java new file mode 100644 index 0000000..23fb496 --- /dev/null +++ b/src/main/java/ua/com/javarush/gnew/crypto/Cryptor.java @@ -0,0 +1,24 @@ +package ua.com.javarush.gnew.crypto; + +public class Cryptor { + public String cypher(String input, int key) { + + + + Rotator rotator = new Rotator(); + char[] charsArray = input.toCharArray(); + + StringBuilder sb = new StringBuilder(); + SymbolsBelonging symBel = new SymbolsBelonging(); + for(char symbol : charsArray) { + if(ConstantsForCryptor.ALPHABET.getCharsArrayConstants().contains(Character.toUpperCase(symbol))){ + sb.append(symBel.symbolsBelongingABC(symbol, rotator.rotateAlphabet(key))); + } else if (ConstantsForCryptor.PUNCTUATION.getCharsArrayConstants().contains(symbol)) { + sb.append(symBel.symbolsBelongingPUNCTUATION(symbol, rotator.rotatePunctuation(key))); + }else { + sb.append(symbol); + } + } + return sb.toString(); + } +} From e09162c0b76ea2d111563dbbbb129aa5e646a6d3 Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Sun, 1 Sep 2024 23:00:18 +0300 Subject: [PATCH 21/41] create class Cryptor.java delete classes Encrypt.java and Decrypt.java --- .../ua/com/javarush/gnew/crypto/Decrypt.java | 27 -------------- .../ua/com/javarush/gnew/crypto/Encrypt.java | 37 ------------------- 2 files changed, 64 deletions(-) delete mode 100644 src/main/java/ua/com/javarush/gnew/crypto/Decrypt.java delete mode 100644 src/main/java/ua/com/javarush/gnew/crypto/Encrypt.java diff --git a/src/main/java/ua/com/javarush/gnew/crypto/Decrypt.java b/src/main/java/ua/com/javarush/gnew/crypto/Decrypt.java deleted file mode 100644 index ea6088d..0000000 --- a/src/main/java/ua/com/javarush/gnew/crypto/Decrypt.java +++ /dev/null @@ -1,27 +0,0 @@ -package ua.com.javarush.gnew.crypto; - -import java.util.ArrayList; -import java.util.Collections; - -public class Decrypt { - - public String decrypt(String input, int key) { - if (key % 26 ==0) { - key = 7 ; - } - key = (key % 26); - - ArrayList rotateAlphabet = new ArrayList(Alphabet.ABC.getAlphabet()); - Collections.rotate(rotateAlphabet, key); - - char[] charsArray = input.toCharArray(); - - StringBuilder sb = new StringBuilder(); - Encrypt enc = new Encrypt(); - for(char symbol : charsArray) { - sb.append(enc.symbolsBelongingAlphabet(symbol, rotateAlphabet)); - } - return sb.toString(); - } - -} diff --git a/src/main/java/ua/com/javarush/gnew/crypto/Encrypt.java b/src/main/java/ua/com/javarush/gnew/crypto/Encrypt.java deleted file mode 100644 index 2342e6f..0000000 --- a/src/main/java/ua/com/javarush/gnew/crypto/Encrypt.java +++ /dev/null @@ -1,37 +0,0 @@ -package ua.com.javarush.gnew.crypto; - -import java.util.ArrayList; -import java.util.Collections; - -public class Encrypt { - - public String encrypt(String input, int key) { - if (key % 26 ==0) { - key = 7 ; - } - key = (key % 26) * -1; - System.out.println( key); - - ArrayList rotateAlphabet = new ArrayList<>(Alphabet.ABC.getAlphabet()); - Collections.rotate(rotateAlphabet, key); - char[] charsArray = input.toCharArray(); - - StringBuilder sb = new StringBuilder(); - for(char symbol : charsArray) { - sb.append(this.symbolsBelongingAlphabet(symbol, rotateAlphabet)); - } - - return sb.toString(); - } - - protected Character symbolsBelongingAlphabet(char symbol, ArrayList rotateAlphabet) { - if (!Alphabet.ABC.getAlphabet().contains(Character.toUpperCase(symbol))) { - return symbol; - } - int index = Alphabet.ABC.getAlphabet().indexOf(Character.toUpperCase(symbol)); - if(Character.isLowerCase(symbol)){ - return Character.toLowerCase(rotateAlphabet.get(index)); - } - return rotateAlphabet.get(index); - } -} \ No newline at end of file From 09c3e3fed9d876bab94b686fe124b4a01f82d64e Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Sun, 1 Sep 2024 23:00:48 +0300 Subject: [PATCH 22/41] create class Rotator.java --- .../ua/com/javarush/gnew/crypto/Rotator.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 src/main/java/ua/com/javarush/gnew/crypto/Rotator.java diff --git a/src/main/java/ua/com/javarush/gnew/crypto/Rotator.java b/src/main/java/ua/com/javarush/gnew/crypto/Rotator.java new file mode 100644 index 0000000..21b0daa --- /dev/null +++ b/src/main/java/ua/com/javarush/gnew/crypto/Rotator.java @@ -0,0 +1,22 @@ +package ua.com.javarush.gnew.crypto; + +import java.util.ArrayList; +import java.util.Collections; + +public class Rotator { + + public ArrayList rotateAlphabet(int key){ + + + ArrayList rotateAlphabet = new ArrayList<>(ConstantsForCryptor.ALPHABET.getCharsArrayConstants()); + Collections.rotate(rotateAlphabet, key); + return rotateAlphabet; + } + + public ArrayList rotatePunctuation(Integer key){ + ArrayList rotatePunctuation = new ArrayList<>(ConstantsForCryptor.PUNCTUATION.getCharsArrayConstants()); + Collections.rotate(rotatePunctuation, key); + return rotatePunctuation; + } + +} From 1f0d4ce53fa7fb310b295fd30a7df1ab7acf6d4e Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Sun, 1 Sep 2024 23:01:28 +0300 Subject: [PATCH 23/41] create class SymbolsBelonging.java --- .../javarush/gnew/crypto/SymbolsBelonging.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 src/main/java/ua/com/javarush/gnew/crypto/SymbolsBelonging.java diff --git a/src/main/java/ua/com/javarush/gnew/crypto/SymbolsBelonging.java b/src/main/java/ua/com/javarush/gnew/crypto/SymbolsBelonging.java new file mode 100644 index 0000000..dd0bb01 --- /dev/null +++ b/src/main/java/ua/com/javarush/gnew/crypto/SymbolsBelonging.java @@ -0,0 +1,18 @@ +package ua.com.javarush.gnew.crypto; + +import java.util.ArrayList; + +public class SymbolsBelonging { + protected Character symbolsBelongingABC(char symbol, ArrayList rotateAlphabet) { + int index = ConstantsForCryptor.ALPHABET.getCharsArrayConstants().indexOf(Character.toUpperCase(symbol)); + if(Character.isLowerCase(symbol)){ + return Character.toLowerCase(rotateAlphabet.get(index)); + } + return rotateAlphabet.get(index); + } + + protected Character symbolsBelongingPUNCTUATION(char symbol, ArrayList rotatePunctuation){ + int index = ConstantsForCryptor.PUNCTUATION.getCharsArrayConstants().indexOf(symbol); + return rotatePunctuation.get(index); + } +} From c1494626e0600a275bacdcc7ee680be8c69c2748 Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Sun, 1 Sep 2024 23:02:17 +0300 Subject: [PATCH 24/41] rename class ConstantsForCryptor --- .../{ConstantsForCipher.java => ConstantsForCryptor.java} | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) rename src/main/java/ua/com/javarush/gnew/crypto/{ConstantsForCipher.java => ConstantsForCryptor.java} (80%) diff --git a/src/main/java/ua/com/javarush/gnew/crypto/ConstantsForCipher.java b/src/main/java/ua/com/javarush/gnew/crypto/ConstantsForCryptor.java similarity index 80% rename from src/main/java/ua/com/javarush/gnew/crypto/ConstantsForCipher.java rename to src/main/java/ua/com/javarush/gnew/crypto/ConstantsForCryptor.java index 12dd705..7c99c05 100644 --- a/src/main/java/ua/com/javarush/gnew/crypto/ConstantsForCipher.java +++ b/src/main/java/ua/com/javarush/gnew/crypto/ConstantsForCryptor.java @@ -3,7 +3,7 @@ import java.util.ArrayList; import java.util.Arrays; -public enum ConstantsForCipher { +public enum ConstantsForCryptor { ALPHABET(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'))), @@ -13,10 +13,10 @@ public enum ConstantsForCipher { private final ArrayList CharsArrayConstants; - ConstantsForCipher(ArrayList CharsArrayConstants) { + ConstantsForCryptor(ArrayList CharsArrayConstants) { this.CharsArrayConstants = CharsArrayConstants; } - public ArrayList getCharsArrayConstants() { + public ArrayList getCharsArrayConstants() { return this.CharsArrayConstants; } } From 3de15ef2ca830e4e5bd2a1968f5d3f189ab98994 Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Sun, 1 Sep 2024 23:03:12 +0300 Subject: [PATCH 25/41] change class KeyManager.java --- src/main/java/ua/com/javarush/gnew/crypto/KeyManager.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/ua/com/javarush/gnew/crypto/KeyManager.java b/src/main/java/ua/com/javarush/gnew/crypto/KeyManager.java index afdf43c..9b8cf59 100644 --- a/src/main/java/ua/com/javarush/gnew/crypto/KeyManager.java +++ b/src/main/java/ua/com/javarush/gnew/crypto/KeyManager.java @@ -5,8 +5,8 @@ public class KeyManager { - private Integer key; - public Integer key(RunOptions runOptions){ + private int key; + public int key(RunOptions runOptions){ if (runOptions.getCommand() == Command.ENCRYPT && runOptions.getKey() >0) { key = (runOptions.getKey() % 26) * -1; return key; From 4b98ac2951204f4182f378e7ed82af6d63a8872a Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Sun, 1 Sep 2024 23:12:45 +0300 Subject: [PATCH 26/41] renaming --- .../com/javarush/gnew/crypto/ConstantsForCryptor.java | 10 +++++----- src/main/java/ua/com/javarush/gnew/crypto/Cryptor.java | 7 +++---- src/main/java/ua/com/javarush/gnew/crypto/Rotator.java | 8 ++++---- .../ua/com/javarush/gnew/crypto/SymbolsBelonging.java | 4 ++-- 4 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/main/java/ua/com/javarush/gnew/crypto/ConstantsForCryptor.java b/src/main/java/ua/com/javarush/gnew/crypto/ConstantsForCryptor.java index 7c99c05..3a7351f 100644 --- a/src/main/java/ua/com/javarush/gnew/crypto/ConstantsForCryptor.java +++ b/src/main/java/ua/com/javarush/gnew/crypto/ConstantsForCryptor.java @@ -11,12 +11,12 @@ public enum ConstantsForCryptor { '(', ')', '[', ']', '{', '}','#', ' ', '@', '*', '+', '=', '_', '&', '\\', '/', '₴', '~', '`'))); - private final ArrayList CharsArrayConstants; + private final ArrayList CHARS_ARRAY_CONSTANT; - ConstantsForCryptor(ArrayList CharsArrayConstants) { - this.CharsArrayConstants = CharsArrayConstants; + ConstantsForCryptor(ArrayList CHARS_ARRAY_CONSTANS) { + this.CHARS_ARRAY_CONSTANT = CHARS_ARRAY_CONSTANS; } - public ArrayList getCharsArrayConstants() { - return this.CharsArrayConstants; + public ArrayList getCharsArrayConstant() { + return this.CHARS_ARRAY_CONSTANT; } } diff --git a/src/main/java/ua/com/javarush/gnew/crypto/Cryptor.java b/src/main/java/ua/com/javarush/gnew/crypto/Cryptor.java index 23fb496..1fb5008 100644 --- a/src/main/java/ua/com/javarush/gnew/crypto/Cryptor.java +++ b/src/main/java/ua/com/javarush/gnew/crypto/Cryptor.java @@ -3,17 +3,16 @@ public class Cryptor { public String cypher(String input, int key) { - - Rotator rotator = new Rotator(); + char[] charsArray = input.toCharArray(); StringBuilder sb = new StringBuilder(); SymbolsBelonging symBel = new SymbolsBelonging(); for(char symbol : charsArray) { - if(ConstantsForCryptor.ALPHABET.getCharsArrayConstants().contains(Character.toUpperCase(symbol))){ + if(ConstantsForCryptor.ALPHABET.getCharsArrayConstant().contains(Character.toUpperCase(symbol))){ sb.append(symBel.symbolsBelongingABC(symbol, rotator.rotateAlphabet(key))); - } else if (ConstantsForCryptor.PUNCTUATION.getCharsArrayConstants().contains(symbol)) { + } else if (ConstantsForCryptor.PUNCTUATION.getCharsArrayConstant().contains(symbol)) { sb.append(symBel.symbolsBelongingPUNCTUATION(symbol, rotator.rotatePunctuation(key))); }else { sb.append(symbol); diff --git a/src/main/java/ua/com/javarush/gnew/crypto/Rotator.java b/src/main/java/ua/com/javarush/gnew/crypto/Rotator.java index 21b0daa..046bf57 100644 --- a/src/main/java/ua/com/javarush/gnew/crypto/Rotator.java +++ b/src/main/java/ua/com/javarush/gnew/crypto/Rotator.java @@ -5,16 +5,16 @@ public class Rotator { - public ArrayList rotateAlphabet(int key){ + protected ArrayList rotateAlphabet(int key){ - ArrayList rotateAlphabet = new ArrayList<>(ConstantsForCryptor.ALPHABET.getCharsArrayConstants()); + ArrayList rotateAlphabet = new ArrayList<>(ConstantsForCryptor.ALPHABET.getcharsArrayConstant()); Collections.rotate(rotateAlphabet, key); return rotateAlphabet; } - public ArrayList rotatePunctuation(Integer key){ - ArrayList rotatePunctuation = new ArrayList<>(ConstantsForCryptor.PUNCTUATION.getCharsArrayConstants()); + protected ArrayList rotatePunctuation(Integer key){ + ArrayList rotatePunctuation = new ArrayList<>(ConstantsForCryptor.PUNCTUATION.getcharsArrayConstant()); Collections.rotate(rotatePunctuation, key); return rotatePunctuation; } diff --git a/src/main/java/ua/com/javarush/gnew/crypto/SymbolsBelonging.java b/src/main/java/ua/com/javarush/gnew/crypto/SymbolsBelonging.java index dd0bb01..2a55aa3 100644 --- a/src/main/java/ua/com/javarush/gnew/crypto/SymbolsBelonging.java +++ b/src/main/java/ua/com/javarush/gnew/crypto/SymbolsBelonging.java @@ -4,7 +4,7 @@ public class SymbolsBelonging { protected Character symbolsBelongingABC(char symbol, ArrayList rotateAlphabet) { - int index = ConstantsForCryptor.ALPHABET.getCharsArrayConstants().indexOf(Character.toUpperCase(symbol)); + int index = ConstantsForCryptor.ALPHABET.getcharsArrayConstant().indexOf(Character.toUpperCase(symbol)); if(Character.isLowerCase(symbol)){ return Character.toLowerCase(rotateAlphabet.get(index)); } @@ -12,7 +12,7 @@ protected Character symbolsBelongingABC(char symbol, ArrayList rotate } protected Character symbolsBelongingPUNCTUATION(char symbol, ArrayList rotatePunctuation){ - int index = ConstantsForCryptor.PUNCTUATION.getCharsArrayConstants().indexOf(symbol); + int index = ConstantsForCryptor.PUNCTUATION.getcharsArrayConstant().indexOf(symbol); return rotatePunctuation.get(index); } } From b394db7c0dd02a9185861685024dce58003d58ff Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Sun, 1 Sep 2024 23:13:50 +0300 Subject: [PATCH 27/41] renaming --- src/main/java/ua/com/javarush/gnew/crypto/Rotator.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/ua/com/javarush/gnew/crypto/Rotator.java b/src/main/java/ua/com/javarush/gnew/crypto/Rotator.java index 046bf57..c8db628 100644 --- a/src/main/java/ua/com/javarush/gnew/crypto/Rotator.java +++ b/src/main/java/ua/com/javarush/gnew/crypto/Rotator.java @@ -8,13 +8,13 @@ public class Rotator { protected ArrayList rotateAlphabet(int key){ - ArrayList rotateAlphabet = new ArrayList<>(ConstantsForCryptor.ALPHABET.getcharsArrayConstant()); + ArrayList rotateAlphabet = new ArrayList<>(ConstantsForCryptor.ALPHABET.getCharsArrayConstant()); Collections.rotate(rotateAlphabet, key); return rotateAlphabet; } protected ArrayList rotatePunctuation(Integer key){ - ArrayList rotatePunctuation = new ArrayList<>(ConstantsForCryptor.PUNCTUATION.getcharsArrayConstant()); + ArrayList rotatePunctuation = new ArrayList<>(ConstantsForCryptor.PUNCTUATION.getCharsArrayConstant()); Collections.rotate(rotatePunctuation, key); return rotatePunctuation; } From a889546748bff771f809dba56df484df9f7ae8ab Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Sun, 1 Sep 2024 23:23:40 +0300 Subject: [PATCH 28/41] add try - catch and renaming in SymbolsBelonging.java --- .../javarush/gnew/crypto/SymbolsBelonging.java | 4 ++-- .../ua/com/javarush/gnew/file/FileManager.java | 18 ++++++++++++++---- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/main/java/ua/com/javarush/gnew/crypto/SymbolsBelonging.java b/src/main/java/ua/com/javarush/gnew/crypto/SymbolsBelonging.java index 2a55aa3..0a11b23 100644 --- a/src/main/java/ua/com/javarush/gnew/crypto/SymbolsBelonging.java +++ b/src/main/java/ua/com/javarush/gnew/crypto/SymbolsBelonging.java @@ -4,7 +4,7 @@ public class SymbolsBelonging { protected Character symbolsBelongingABC(char symbol, ArrayList rotateAlphabet) { - int index = ConstantsForCryptor.ALPHABET.getcharsArrayConstant().indexOf(Character.toUpperCase(symbol)); + int index = ConstantsForCryptor.ALPHABET.getCharsArrayConstant().indexOf(Character.toUpperCase(symbol)); if(Character.isLowerCase(symbol)){ return Character.toLowerCase(rotateAlphabet.get(index)); } @@ -12,7 +12,7 @@ protected Character symbolsBelongingABC(char symbol, ArrayList rotate } protected Character symbolsBelongingPUNCTUATION(char symbol, ArrayList rotatePunctuation){ - int index = ConstantsForCryptor.PUNCTUATION.getcharsArrayConstant().indexOf(symbol); + int index = ConstantsForCryptor.PUNCTUATION.getCharsArrayConstant().indexOf(symbol); return rotatePunctuation.get(index); } } 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..e2869c7 100644 --- a/src/main/java/ua/com/javarush/gnew/file/FileManager.java +++ b/src/main/java/ua/com/javarush/gnew/file/FileManager.java @@ -5,11 +5,21 @@ import java.nio.file.Path; public class FileManager { - public String read(Path filePath) throws IOException { - return Files.readString(filePath); + public String read(Path filePath) { + String content = null; + try { + content = Files.readString(filePath); + } catch (IOException e) { + System.err.println("Ошибка при чтении файла: " + e.getMessage()); + } + return content; } - 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) { + System.err.println("Ошибка при записи в файл: " + e.getMessage()); + } } } From 5159e5f4fb59143e2db0a8e9fc978bf3f8e534e4 Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Sun, 1 Sep 2024 23:54:04 +0300 Subject: [PATCH 29/41] change KeyManager.java for negative key --- .../java/ua/com/javarush/gnew/crypto/KeyManager.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/main/java/ua/com/javarush/gnew/crypto/KeyManager.java b/src/main/java/ua/com/javarush/gnew/crypto/KeyManager.java index 9b8cf59..189e81d 100644 --- a/src/main/java/ua/com/javarush/gnew/crypto/KeyManager.java +++ b/src/main/java/ua/com/javarush/gnew/crypto/KeyManager.java @@ -7,18 +7,15 @@ public class KeyManager { private int key; public int key(RunOptions runOptions){ - if (runOptions.getCommand() == Command.ENCRYPT && runOptions.getKey() >0) { + if (runOptions.getCommand() == Command.ENCRYPT && runOptions.getKey() !=0) { key = (runOptions.getKey() % 26) * -1; return key; - }else if (runOptions.getCommand() == Command.DECRYPT && runOptions.getKey() < 0){ + }else if (runOptions.getCommand() == Command.DECRYPT && runOptions.getKey() != 0) { key = (runOptions.getKey() % 26) * -1; return key; - - }else if ((runOptions.getKey() % 26) == 0){ + }else { key =7; return runOptions.getCommand() == Command.ENCRYPT ? -key : key; } - key = runOptions.getKey(); - return key; } } From c338abdf6a7ffae1b9ce937b0cc7ee69b3546a67 Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Sun, 1 Sep 2024 23:56:35 +0300 Subject: [PATCH 30/41] change for new classes --- src/main/java/ua/com/javarush/gnew/Main.java | 47 ++++++++++---------- 1 file changed, 23 insertions(+), 24 deletions(-) diff --git a/src/main/java/ua/com/javarush/gnew/Main.java b/src/main/java/ua/com/javarush/gnew/Main.java index 8f18b9f..64f91a2 100644 --- a/src/main/java/ua/com/javarush/gnew/Main.java +++ b/src/main/java/ua/com/javarush/gnew/Main.java @@ -1,7 +1,7 @@ package ua.com.javarush.gnew; -import ua.com.javarush.gnew.crypto.Decrypt; -import ua.com.javarush.gnew.crypto.Encrypt; +import ua.com.javarush.gnew.crypto.Cryptor; +import ua.com.javarush.gnew.crypto.KeyManager; import ua.com.javarush.gnew.file.FileManager; import ua.com.javarush.gnew.runner.ArgumentsParser; import ua.com.javarush.gnew.runner.Command; @@ -11,28 +11,27 @@ public class Main { public static void main(String[] args) { - Encrypt cipher = new Encrypt(); - System.out.println(cipher.encrypt("Abc abC", 0)); - Decrypt encripted = new Decrypt(); - System.out.println(encripted.decrypt("Hij hiJ", 0)); -// Encrypt cypher = new Encrypt(); -// FileManager fileManager = new FileManager(); -// ArgumentsParser argumentsParser = new ArgumentsParser(); -// RunOptions runOptions = argumentsParser.parse(args); -// -// 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); -// } -// } catch (Exception e) { -// System.out.println(e.getMessage()); -// } + Cryptor cryptor = new Cryptor(); + FileManager fileManager = new FileManager(); + ArgumentsParser argumentsParser = new ArgumentsParser(); + RunOptions runOptions = argumentsParser.parse(args); + KeyManager keyManager = new KeyManager(); + + try { + if (runOptions.getCommand() == Command.ENCRYPT) { + String content = fileManager.read(runOptions.getFilePath()); + int key = keyManager.key(runOptions); + String encryptedContent = cryptor.cypher(content, key); + 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); + } + } catch (Exception e) { + System.out.println(e.getMessage()); + } } } \ No newline at end of file From 470fc6593877c447f05fde3cbc7699be5a79f758 Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Mon, 2 Sep 2024 00:03:54 +0300 Subject: [PATCH 31/41] deleted class --- .../ua/com/javarush/gnew/crypto/Cipher.java | 35 ------------------- 1 file changed, 35 deletions(-) delete mode 100644 src/main/java/ua/com/javarush/gnew/crypto/Cipher.java diff --git a/src/main/java/ua/com/javarush/gnew/crypto/Cipher.java b/src/main/java/ua/com/javarush/gnew/crypto/Cipher.java deleted file mode 100644 index a8460aa..0000000 --- a/src/main/java/ua/com/javarush/gnew/crypto/Cipher.java +++ /dev/null @@ -1,35 +0,0 @@ -package ua.com.javarush.gnew.crypto; - -import ua.com.javarush.gnew.runner.RunOptions; - -import java.util.ArrayList; -import java.util.Collections; - -public class Cipher { - private char[] inputChars; - private ArrayList rotateAlphabet; - private ArrayList rotatePunctuation; - - public char[] inputChars(String input){ - KeyManager keyManager = new KeyManager(); - - rotateAlphabet = ConstantsForCipher.ALPHABET.getCharsArrayConstants(); - Collections.rotate(rotateAlphabet, keyManager.key); - rotatePunctuation = new ArrayList<>(ConstantsForCipher.PUNCTUATION.getCharsArrayConstants()); - Collections.rotate(rotatePunctuation, keyManager.key); - - return input.toCharArray(); - } - - public char[] getInputChars() { - return inputChars; - } - - public ArrayList getRotateAlphabet() { - return rotateAlphabet; - } - - public ArrayList getRotatePunctuation() { - return rotatePunctuation; - } -} From 2d962afc6d49772cde221359da4e9aed74ab481e Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Tue, 3 Sep 2024 00:59:54 +0300 Subject: [PATCH 32/41] created classes FileNameTag and NewFileNamePath Change Main --- src/main/java/ua/com/javarush/gnew/Main.java | 20 ++++------ .../com/javarush/gnew/file/FileNameTag.java | 37 +++++++++++++++++++ .../javarush/gnew/file/NewFileNamePath.java | 13 +++++++ .../com/javarush/gnew/language/Language.java | 12 ------ 4 files changed, 58 insertions(+), 24 deletions(-) create mode 100644 src/main/java/ua/com/javarush/gnew/file/FileNameTag.java create mode 100644 src/main/java/ua/com/javarush/gnew/file/NewFileNamePath.java delete mode 100644 src/main/java/ua/com/javarush/gnew/language/Language.java diff --git a/src/main/java/ua/com/javarush/gnew/Main.java b/src/main/java/ua/com/javarush/gnew/Main.java index 64f91a2..7b66fed 100644 --- a/src/main/java/ua/com/javarush/gnew/Main.java +++ b/src/main/java/ua/com/javarush/gnew/Main.java @@ -3,8 +3,9 @@ import ua.com.javarush.gnew.crypto.Cryptor; import ua.com.javarush.gnew.crypto.KeyManager; import ua.com.javarush.gnew.file.FileManager; +import ua.com.javarush.gnew.file.FileNameTag; +import ua.com.javarush.gnew.file.NewFileNamePath; import ua.com.javarush.gnew.runner.ArgumentsParser; -import ua.com.javarush.gnew.runner.Command; import ua.com.javarush.gnew.runner.RunOptions; import java.nio.file.Path; @@ -18,20 +19,15 @@ public static void main(String[] args) { KeyManager keyManager = new KeyManager(); try { - if (runOptions.getCommand() == Command.ENCRYPT) { - String content = fileManager.read(runOptions.getFilePath()); - int key = keyManager.key(runOptions); - String encryptedContent = cryptor.cypher(content, key); - 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); - } + String content = fileManager.read(runOptions.getFilePath()); + int key = keyManager.key(runOptions); + String cryptoContent = cryptor.cypher(content, key); + NewFileNamePath path = new NewFileNamePath(); + fileManager.write(path.path(runOptions) , cryptoContent); } catch (Exception e) { System.out.println(e.getMessage()); } + } } \ No newline at end of file diff --git a/src/main/java/ua/com/javarush/gnew/file/FileNameTag.java b/src/main/java/ua/com/javarush/gnew/file/FileNameTag.java new file mode 100644 index 0000000..8dcc564 --- /dev/null +++ b/src/main/java/ua/com/javarush/gnew/file/FileNameTag.java @@ -0,0 +1,37 @@ +package ua.com.javarush.gnew.file; + +import ua.com.javarush.gnew.runner.Command; +import ua.com.javarush.gnew.runner.RunOptions; + +public class FileNameTag { + + protected String fileNameNotExtension(RunOptions runOptions){ + String fileName = runOptions.getFilePath().getFileName().toString(); + int lastDotIndex = fileName.lastIndexOf('.'); + return fileName.substring(0, lastDotIndex); + } + + protected String nameTag(RunOptions runOptions){ + StringBuilder tag = new StringBuilder(); + if(runOptions.getCommand() == Command.ENCRYPT){ + tag.append("[ENCRYPTED]"); + } else if (runOptions.getCommand() == Command.DECRYPT) { + tag.append("[DECRYPTED]"); + } else if (runOptions.getCommand() == Command.BRUTEFORCE) { + tag.append("[DECRYPTED] [WITH KEY "); + tag.append(runOptions.getKey()); // дописать правильно откуда взять ключ после bruteforce + tag.append("]"); + } + return tag.toString(); + } + + protected String fileNameTag(RunOptions runOptions){ + StringBuilder sb = new StringBuilder(); + sb.append(fileNameNotExtension(runOptions)); + sb.append(nameTag(runOptions)); + return sb.toString() + ".txt"; + + } + + +} diff --git a/src/main/java/ua/com/javarush/gnew/file/NewFileNamePath.java b/src/main/java/ua/com/javarush/gnew/file/NewFileNamePath.java new file mode 100644 index 0000000..73014bd --- /dev/null +++ b/src/main/java/ua/com/javarush/gnew/file/NewFileNamePath.java @@ -0,0 +1,13 @@ +package ua.com.javarush.gnew.file; + +import ua.com.javarush.gnew.runner.RunOptions; + +import java.nio.file.Path; + +public class NewFileNamePath { + + public Path path(RunOptions runOptions) { + FileNameTag tag = new FileNameTag(); + return Path.of(tag.fileNameTag(runOptions)); + } +} diff --git a/src/main/java/ua/com/javarush/gnew/language/Language.java b/src/main/java/ua/com/javarush/gnew/language/Language.java deleted file mode 100644 index 067dd2f..0000000 --- a/src/main/java/ua/com/javarush/gnew/language/Language.java +++ /dev/null @@ -1,12 +0,0 @@ -package ua.com.javarush.gnew.language; - -import java.util.ArrayList; - -public abstract class Language { - - private final ArrayList alphabet; - - public Language(ArrayList alphabet) { - this.alphabet = alphabet; - } -} From 93e7b3e2b2dccaf3fd8d0542cb2ee56df157e2fb Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Wed, 4 Sep 2024 20:09:55 +0300 Subject: [PATCH 33/41] created classes FileNameTag and NewFileNamePath Change Main --- src/main/java/ua/com/javarush/gnew/Main.java | 5 +---- src/main/java/ua/com/javarush/gnew/crypto/KeyManager.java | 4 ++-- src/main/java/ua/com/javarush/gnew/file/NewFileNamePath.java | 3 +-- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/src/main/java/ua/com/javarush/gnew/Main.java b/src/main/java/ua/com/javarush/gnew/Main.java index 7b66fed..25d6c17 100644 --- a/src/main/java/ua/com/javarush/gnew/Main.java +++ b/src/main/java/ua/com/javarush/gnew/Main.java @@ -3,13 +3,10 @@ import ua.com.javarush.gnew.crypto.Cryptor; import ua.com.javarush.gnew.crypto.KeyManager; import ua.com.javarush.gnew.file.FileManager; -import ua.com.javarush.gnew.file.FileNameTag; import ua.com.javarush.gnew.file.NewFileNamePath; import ua.com.javarush.gnew.runner.ArgumentsParser; import ua.com.javarush.gnew.runner.RunOptions; -import java.nio.file.Path; - public class Main { public static void main(String[] args) { Cryptor cryptor = new Cryptor(); @@ -23,7 +20,7 @@ public static void main(String[] args) { int key = keyManager.key(runOptions); String cryptoContent = cryptor.cypher(content, key); NewFileNamePath path = new NewFileNamePath(); - fileManager.write(path.path(runOptions) , cryptoContent); + fileManager.write(path.newPath(runOptions) , cryptoContent); } catch (Exception e) { System.out.println(e.getMessage()); } diff --git a/src/main/java/ua/com/javarush/gnew/crypto/KeyManager.java b/src/main/java/ua/com/javarush/gnew/crypto/KeyManager.java index 189e81d..9aac614 100644 --- a/src/main/java/ua/com/javarush/gnew/crypto/KeyManager.java +++ b/src/main/java/ua/com/javarush/gnew/crypto/KeyManager.java @@ -11,8 +11,8 @@ public int key(RunOptions runOptions){ key = (runOptions.getKey() % 26) * -1; return key; }else if (runOptions.getCommand() == Command.DECRYPT && runOptions.getKey() != 0) { - key = (runOptions.getKey() % 26) * -1; - return key; + return (runOptions.getKey() % 26); + }else { key =7; return runOptions.getCommand() == Command.ENCRYPT ? -key : key; diff --git a/src/main/java/ua/com/javarush/gnew/file/NewFileNamePath.java b/src/main/java/ua/com/javarush/gnew/file/NewFileNamePath.java index 73014bd..2b38f31 100644 --- a/src/main/java/ua/com/javarush/gnew/file/NewFileNamePath.java +++ b/src/main/java/ua/com/javarush/gnew/file/NewFileNamePath.java @@ -1,12 +1,11 @@ package ua.com.javarush.gnew.file; import ua.com.javarush.gnew.runner.RunOptions; - import java.nio.file.Path; public class NewFileNamePath { - public Path path(RunOptions runOptions) { + public Path newPath(RunOptions runOptions) { FileNameTag tag = new FileNameTag(); return Path.of(tag.fileNameTag(runOptions)); } From 9787aa07e2088886220d5858ca5db65d55c7c3fa Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Sun, 8 Sep 2024 21:18:41 +0300 Subject: [PATCH 34/41] changed if for key (null pointer exception) --- src/main/java/ua/com/javarush/gnew/runner/ArgumentsParser.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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..678d1a4 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.ENCRYPT || command == Command.DECRYPT) { throw new IllegalArgumentException("Key is required for encrypt or decrypt mode"); } From 0c572b18123054395bde8c47f5a2828dd98650ce Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Sun, 8 Sep 2024 21:20:12 +0300 Subject: [PATCH 35/41] minor changes for ease of writing code --- .../java/ua/com/javarush/gnew/crypto/ConstantsForCryptor.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/ua/com/javarush/gnew/crypto/ConstantsForCryptor.java b/src/main/java/ua/com/javarush/gnew/crypto/ConstantsForCryptor.java index 3a7351f..9f3eeb1 100644 --- a/src/main/java/ua/com/javarush/gnew/crypto/ConstantsForCryptor.java +++ b/src/main/java/ua/com/javarush/gnew/crypto/ConstantsForCryptor.java @@ -7,8 +7,8 @@ public enum ConstantsForCryptor { ALPHABET(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'))), - PUNCTUATION (new ArrayList<>(Arrays.asList('.', ',', '!', '?', ':', ';', '-', - '(', ')', '[', ']', '{', '}','#', ' ', '@', '*', '+', '=', '_', '&', + PUNCTUATION (new ArrayList<>(Arrays.asList(' ', ',', '!', '?', ':', ';', '-', + '(', ')', '[', ']', '{', '}','#', '.', '@', '*', '+', '=', '_', '&', '\\', '/', '₴', '~', '`'))); private final ArrayList CHARS_ARRAY_CONSTANT; From 1f39f434e14397be8ad4a8d5cf78cf97a35d5bb6 Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Sun, 8 Sep 2024 21:24:48 +0300 Subject: [PATCH 36/41] added a constructor with one argument (for brute force) added the MostFrequentChar method (also for brute force) --- .../ua/com/javarush/gnew/crypto/Cryptor.java | 44 ++++++++++++++++++- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/src/main/java/ua/com/javarush/gnew/crypto/Cryptor.java b/src/main/java/ua/com/javarush/gnew/crypto/Cryptor.java index 1fb5008..344956c 100644 --- a/src/main/java/ua/com/javarush/gnew/crypto/Cryptor.java +++ b/src/main/java/ua/com/javarush/gnew/crypto/Cryptor.java @@ -1,7 +1,25 @@ package ua.com.javarush.gnew.crypto; + +import java.util.HashMap; +import java.util.Map; + public class Cryptor { - public String cypher(String input, int key) { + + private String input; + private int key; + + public Cryptor(String input, int key){ + this.input = input; + this.key = key; + } + + + public Cryptor(String input){ + this.input = input; + } + + public String cypher() { Rotator rotator = new Rotator(); @@ -12,7 +30,7 @@ public String cypher(String input, int key) { for(char symbol : charsArray) { if(ConstantsForCryptor.ALPHABET.getCharsArrayConstant().contains(Character.toUpperCase(symbol))){ sb.append(symBel.symbolsBelongingABC(symbol, rotator.rotateAlphabet(key))); - } else if (ConstantsForCryptor.PUNCTUATION.getCharsArrayConstant().contains(symbol)) { + }else if (ConstantsForCryptor.PUNCTUATION.getCharsArrayConstant().contains(symbol)) { sb.append(symBel.symbolsBelongingPUNCTUATION(symbol, rotator.rotatePunctuation(key))); }else { sb.append(symbol); @@ -20,4 +38,26 @@ public String cypher(String input, int key) { } return sb.toString(); } + + public char MostFrequentChar(){ + + char[] charsArray = input.toCharArray(); + + Map frequencyMap = new HashMap<>(); + for(char symbol : charsArray){ + frequencyMap.put(symbol, frequencyMap.getOrDefault(symbol, 0) + 1); + } + + char mostFrequentChar = '\0'; + int maxFrequency = 0; + + for (Map.Entry entry : frequencyMap.entrySet()) { + if (entry.getValue() > maxFrequency) { + mostFrequentChar = entry.getKey(); + maxFrequency = entry.getValue(); + } + } + return mostFrequentChar; + } + } From b4e9b9f9846ada71762050d8f512b280634a0742 Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Sun, 8 Sep 2024 21:25:50 +0300 Subject: [PATCH 37/41] virtually unchanged --- src/main/java/ua/com/javarush/gnew/file/FileManager.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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 e2869c7..fb8a42c 100644 --- a/src/main/java/ua/com/javarush/gnew/file/FileManager.java +++ b/src/main/java/ua/com/javarush/gnew/file/FileManager.java @@ -10,7 +10,7 @@ public String read(Path filePath) { try { content = Files.readString(filePath); } catch (IOException e) { - System.err.println("Ошибка при чтении файла: " + e.getMessage()); + System.out.println("Ошибка при чтении файла: " + e.getMessage()); } return content; } @@ -19,7 +19,7 @@ public void write(Path filePath, String content) { try { Files.writeString(filePath, content); } catch (IOException e) { - System.err.println("Ошибка при записи в файл: " + e.getMessage()); + System.out.println("Ошибка при записи в файл: " + e.getMessage()); } } } From bfc585a45444d8fcac6058b75c158904023204b4 Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Sun, 8 Sep 2024 21:27:53 +0300 Subject: [PATCH 38/41] added object of class KeyManager --- src/main/java/ua/com/javarush/gnew/file/FileNameTag.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/ua/com/javarush/gnew/file/FileNameTag.java b/src/main/java/ua/com/javarush/gnew/file/FileNameTag.java index 8dcc564..7675bfd 100644 --- a/src/main/java/ua/com/javarush/gnew/file/FileNameTag.java +++ b/src/main/java/ua/com/javarush/gnew/file/FileNameTag.java @@ -1,5 +1,6 @@ package ua.com.javarush.gnew.file; +import ua.com.javarush.gnew.crypto.KeyManager; import ua.com.javarush.gnew.runner.Command; import ua.com.javarush.gnew.runner.RunOptions; @@ -19,7 +20,8 @@ protected String nameTag(RunOptions runOptions){ tag.append("[DECRYPTED]"); } else if (runOptions.getCommand() == Command.BRUTEFORCE) { tag.append("[DECRYPTED] [WITH KEY "); - tag.append(runOptions.getKey()); // дописать правильно откуда взять ключ после bruteforce + KeyManager keyManager = new KeyManager(); + tag.append(keyManager.key(runOptions)); tag.append("]"); } return tag.toString(); From 90fb29c80ae820b99e10d91894d2f354b1b38daf Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Sun, 8 Sep 2024 21:30:33 +0300 Subject: [PATCH 39/41] added method keySelection(), to add a key when using the bruteforce command --- .../com/javarush/gnew/crypto/KeyManager.java | 22 +++++++++++++------ 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/src/main/java/ua/com/javarush/gnew/crypto/KeyManager.java b/src/main/java/ua/com/javarush/gnew/crypto/KeyManager.java index 9aac614..15da17c 100644 --- a/src/main/java/ua/com/javarush/gnew/crypto/KeyManager.java +++ b/src/main/java/ua/com/javarush/gnew/crypto/KeyManager.java @@ -1,21 +1,29 @@ package ua.com.javarush.gnew.crypto; +import ua.com.javarush.gnew.file.FileManager; import ua.com.javarush.gnew.runner.RunOptions; import ua.com.javarush.gnew.runner.Command; public class KeyManager { - private int key; + public int key(RunOptions runOptions){ if (runOptions.getCommand() == Command.ENCRYPT && runOptions.getKey() !=0) { - key = (runOptions.getKey() % 26) * -1; - return key; + return (runOptions.getKey() % 26) * -1; }else if (runOptions.getCommand() == Command.DECRYPT && runOptions.getKey() != 0) { - return (runOptions.getKey() % 26); - + return runOptions.getKey() % 26; + } else if (runOptions.getCommand() == Command.BRUTEFORCE) { + return keySelection(runOptions); }else { - key =7; - return runOptions.getCommand() == Command.ENCRYPT ? -key : key; + return 0; } } + + public int keySelection(RunOptions runOptions) { + FileManager fileManager = new FileManager(); + String input =fileManager.read(runOptions.getFilePath()); + Cryptor cryptor = new Cryptor(input); + return ConstantsForCryptor.PUNCTUATION.getCharsArrayConstant().indexOf(cryptor.MostFrequentChar()); + } + } From fd3a038b71fc2f758d1468c658825f7dcb868332 Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Sun, 8 Sep 2024 21:32:19 +0300 Subject: [PATCH 40/41] added method keySelection(), to add a key when using the bruteforce command --- src/main/java/ua/com/javarush/gnew/Main.java | 19 ++++++++++++++----- .../com/javarush/gnew/runner/RunOptions.java | 7 ++++++- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/main/java/ua/com/javarush/gnew/Main.java b/src/main/java/ua/com/javarush/gnew/Main.java index 25d6c17..11cfb10 100644 --- a/src/main/java/ua/com/javarush/gnew/Main.java +++ b/src/main/java/ua/com/javarush/gnew/Main.java @@ -5,11 +5,11 @@ import ua.com.javarush.gnew.file.FileManager; import ua.com.javarush.gnew.file.NewFileNamePath; import ua.com.javarush.gnew.runner.ArgumentsParser; +import ua.com.javarush.gnew.runner.Command; import ua.com.javarush.gnew.runner.RunOptions; public class Main { public static void main(String[] args) { - Cryptor cryptor = new Cryptor(); FileManager fileManager = new FileManager(); ArgumentsParser argumentsParser = new ArgumentsParser(); RunOptions runOptions = argumentsParser.parse(args); @@ -17,10 +17,19 @@ public static void main(String[] args) { try { String content = fileManager.read(runOptions.getFilePath()); - int key = keyManager.key(runOptions); - String cryptoContent = cryptor.cypher(content, key); - NewFileNamePath path = new NewFileNamePath(); - fileManager.write(path.newPath(runOptions) , cryptoContent); + Cryptor cryptor; + if(runOptions.getCommand() == Command.ENCRYPT || runOptions.getCommand() == Command.DECRYPT){ + int key = keyManager.key(runOptions); + cryptor = new Cryptor(content, key); + String cryptoContent = cryptor.cypher(); + NewFileNamePath path = new NewFileNamePath(); + fileManager.write(path.newPath(runOptions) , cryptoContent); + } else if (runOptions.getCommand() == Command.BRUTEFORCE) { + cryptor = new Cryptor(content, keyManager.keySelection(runOptions)); + String cryptoContent = cryptor.cypher(); + NewFileNamePath path = new NewFileNamePath(); + fileManager.write(path.newPath(runOptions) , cryptoContent); + } } catch (Exception e) { System.out.println(e.getMessage()); } diff --git a/src/main/java/ua/com/javarush/gnew/runner/RunOptions.java b/src/main/java/ua/com/javarush/gnew/runner/RunOptions.java index 99fd2c5..13891ed 100644 --- a/src/main/java/ua/com/javarush/gnew/runner/RunOptions.java +++ b/src/main/java/ua/com/javarush/gnew/runner/RunOptions.java @@ -27,7 +27,12 @@ public class RunOptions { public RunOptions(Command command, Integer key, Path filePath) { this.command = command; - this.key = key; + if( key != null){ + this.key = key; + }else { + this.key = 0; + } + this.filePath = filePath; } From 2f77de236c23c7cc9f226723c6261840df9f24a1 Mon Sep 17 00:00:00 2001 From: Seryii Lahuta Date: Mon, 9 Sep 2024 19:12:55 +0300 Subject: [PATCH 41/41] in class FileNameTag changed name method key() to getKey() --- src/main/java/ua/com/javarush/gnew/Main.java | 2 +- src/main/java/ua/com/javarush/gnew/crypto/Cryptor.java | 6 +++--- src/main/java/ua/com/javarush/gnew/crypto/KeyManager.java | 6 +++--- src/main/java/ua/com/javarush/gnew/file/FileNameTag.java | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/ua/com/javarush/gnew/Main.java b/src/main/java/ua/com/javarush/gnew/Main.java index 11cfb10..a0a355d 100644 --- a/src/main/java/ua/com/javarush/gnew/Main.java +++ b/src/main/java/ua/com/javarush/gnew/Main.java @@ -19,7 +19,7 @@ public static void main(String[] args) { String content = fileManager.read(runOptions.getFilePath()); Cryptor cryptor; if(runOptions.getCommand() == Command.ENCRYPT || runOptions.getCommand() == Command.DECRYPT){ - int key = keyManager.key(runOptions); + int key = keyManager.getKey(runOptions); cryptor = new Cryptor(content, key); String cryptoContent = cryptor.cypher(); NewFileNamePath path = new NewFileNamePath(); diff --git a/src/main/java/ua/com/javarush/gnew/crypto/Cryptor.java b/src/main/java/ua/com/javarush/gnew/crypto/Cryptor.java index 344956c..8c69546 100644 --- a/src/main/java/ua/com/javarush/gnew/crypto/Cryptor.java +++ b/src/main/java/ua/com/javarush/gnew/crypto/Cryptor.java @@ -4,13 +4,13 @@ import java.util.HashMap; import java.util.Map; -public class Cryptor { +public class Cryptor { - private String input; + private String input ; private int key; public Cryptor(String input, int key){ - this.input = input; + this.input =input ; this.key = key; } diff --git a/src/main/java/ua/com/javarush/gnew/crypto/KeyManager.java b/src/main/java/ua/com/javarush/gnew/crypto/KeyManager.java index 15da17c..033ab2a 100644 --- a/src/main/java/ua/com/javarush/gnew/crypto/KeyManager.java +++ b/src/main/java/ua/com/javarush/gnew/crypto/KeyManager.java @@ -7,10 +7,10 @@ public class KeyManager { - public int key(RunOptions runOptions){ - if (runOptions.getCommand() == Command.ENCRYPT && runOptions.getKey() !=0) { + public int getKey(RunOptions runOptions){ + if (runOptions.getCommand() == Command.ENCRYPT) { return (runOptions.getKey() % 26) * -1; - }else if (runOptions.getCommand() == Command.DECRYPT && runOptions.getKey() != 0) { + }else if (runOptions.getCommand() == Command.DECRYPT) { return runOptions.getKey() % 26; } else if (runOptions.getCommand() == Command.BRUTEFORCE) { return keySelection(runOptions); diff --git a/src/main/java/ua/com/javarush/gnew/file/FileNameTag.java b/src/main/java/ua/com/javarush/gnew/file/FileNameTag.java index 7675bfd..ccd8c07 100644 --- a/src/main/java/ua/com/javarush/gnew/file/FileNameTag.java +++ b/src/main/java/ua/com/javarush/gnew/file/FileNameTag.java @@ -21,7 +21,7 @@ protected String nameTag(RunOptions runOptions){ } else if (runOptions.getCommand() == Command.BRUTEFORCE) { tag.append("[DECRYPTED] [WITH KEY "); KeyManager keyManager = new KeyManager(); - tag.append(keyManager.key(runOptions)); + tag.append(keyManager.getKey(runOptions)); tag.append("]"); } return tag.toString();