From 852f546665554888e4cac4f0c3d2920836cfc38e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D1=82=D0=B0=D0=BB=D0=B8=D0=B9?= Date: Thu, 21 Aug 2025 19:45:06 +0300 Subject: [PATCH 1/8] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20=D1=81=D0=B2=D0=BE=D0=B9=20=D0=BF=D0=B0=D0=BA=D0=B5=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/javarush/karpeev/Main.java | 12 +++++ src/main/java/com/javarush/karpeev/Menu.java | 47 ++++++++++++++++++++ 2 files changed, 59 insertions(+) create mode 100644 src/main/java/com/javarush/karpeev/Main.java create mode 100644 src/main/java/com/javarush/karpeev/Menu.java diff --git a/src/main/java/com/javarush/karpeev/Main.java b/src/main/java/com/javarush/karpeev/Main.java new file mode 100644 index 0000000..3ae34a5 --- /dev/null +++ b/src/main/java/com/javarush/karpeev/Main.java @@ -0,0 +1,12 @@ +package com.javarush.karpeev; + +import java.util.Scanner; + +public class Main { + public static void main(String[] args) { + Menu menu = new Menu(); + menu.getMenu(); + + System.out.println(menu.textStringBuilder + "key=" + menu.getKey()); + } +} diff --git a/src/main/java/com/javarush/karpeev/Menu.java b/src/main/java/com/javarush/karpeev/Menu.java new file mode 100644 index 0000000..0515acf --- /dev/null +++ b/src/main/java/com/javarush/karpeev/Menu.java @@ -0,0 +1,47 @@ +package com.javarush.karpeev; + +import java.util.Scanner; + +public class Menu { + StringBuilder textStringBuilder = new StringBuilder(); + private int key; + private int step; + + public int getKey() { + return key; + } + + Scanner input = new Scanner(System.in); + public void getMenu(){ + System.out.println("Добро пожаловать в шифровальщик!"); + inputText(); + inputKey(); + inputStep(); + } + + private StringBuilder inputText(){ + System.out.println("Введите текст для шифрования:"); + String text = input.nextLine(); + textStringBuilder.append(text); + return textStringBuilder; + } + private int inputKey (){ + System.out.print("Введите ключ (положительное целое число): "); + String keyText = input.nextLine(); + key = Integer.parseInt(keyText); + return key; + } + private int inputStep (){ + System.out.println(""" + Введите действие: + 1 - шифрование + 2 - дешифрование + 0 - выход"""); + String stepText = input.nextLine(); + step = Integer.parseInt(stepText); + return step; + } + + + +} From 29943fce36cdd29316297be7641744e51de90965 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D1=82=D0=B0=D0=BB=D0=B8=D0=B9?= Date: Thu, 21 Aug 2025 19:47:20 +0300 Subject: [PATCH 2/8] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20=D1=81=D0=B2=D0=BE=D0=B9=20=D0=BF=D0=B0=D0=BA=D0=B5=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/javarush/karpeev/Main.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/com/javarush/karpeev/Main.java b/src/main/java/com/javarush/karpeev/Main.java index 3ae34a5..bbc7f38 100644 --- a/src/main/java/com/javarush/karpeev/Main.java +++ b/src/main/java/com/javarush/karpeev/Main.java @@ -1,7 +1,5 @@ package com.javarush.karpeev; -import java.util.Scanner; - public class Main { public static void main(String[] args) { Menu menu = new Menu(); From 465cb58e135b2b9377392a58991a9c13dd6afb6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D1=82=D0=B0=D0=BB=D0=B8=D0=B9?= Date: Fri, 22 Aug 2025 11:33:08 +0300 Subject: [PATCH 3/8] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20=D1=81=D0=B2=D0=BE=D0=B9=20=D0=BF=D0=B0=D0=BA=D0=B5=D1=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index e0eb3bf..50d4412 100644 --- a/.gitignore +++ b/.gitignore @@ -5,7 +5,7 @@ target/ !**/src/test/**/out/ *.iml .idea/ - +*.class ### Mac OS ### .DS_Store From df3a2201cc0fdbb1d2e6cef29daa673374a1e430 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D1=82=D0=B0=D0=BB=D0=B8=D0=B9?= Date: Fri, 22 Aug 2025 11:50:39 +0300 Subject: [PATCH 4/8] =?UTF-8?q?=D0=B8=D0=BC=D0=B5=D0=BD=D0=B8=D0=BB=20?= =?UTF-8?q?=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=20=D1=82=D0=B5=D0=BA=D1=81=D1=82?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/javarush/karpeev/Main.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/com/javarush/karpeev/Main.java b/src/main/java/com/javarush/karpeev/Main.java index bbc7f38..6fffb3d 100644 --- a/src/main/java/com/javarush/karpeev/Main.java +++ b/src/main/java/com/javarush/karpeev/Main.java @@ -5,6 +5,6 @@ public static void main(String[] args) { Menu menu = new Menu(); menu.getMenu(); - System.out.println(menu.textStringBuilder + "key=" + menu.getKey()); + System.out.println("text " + menu.textStringBuilder + " c key " + menu.getKey()); } } From 0efd20605133af264a9bee009bddf133785abcd5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D1=82=D0=B0=D0=BB=D0=B8=D0=B9?= Date: Wed, 3 Sep 2025 21:14:25 +0300 Subject: [PATCH 5/8] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D1=8D=D0=BA=D1=82=20=D0=BF=D0=BE=D0=BB?= =?UTF-8?q?=D0=BD=D0=BE=D1=81=D1=82=D1=8C=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/javarush/karpeev/Menu.java | 47 -------- .../javarush/karpeev/command/CryptText.java | 84 ++++++++++++++ .../com/javarush/karpeev/console/Menu.java | 109 ++++++++++++++++++ .../javarush/karpeev/constants/Constants.java | 20 ++++ .../javarush/karpeev/constants/Message.java | 21 ++++ .../FileForReadNotFoundException.java | 8 ++ .../FileForWriteNotFoundException.java | 8 ++ .../karpeev/fileManager/FileManager.java | 53 +++++++++ .../com/javarush/karpeev/{ => main}/Main.java | 8 +- 9 files changed, 307 insertions(+), 51 deletions(-) delete mode 100644 src/main/java/com/javarush/karpeev/Menu.java create mode 100644 src/main/java/com/javarush/karpeev/command/CryptText.java create mode 100644 src/main/java/com/javarush/karpeev/console/Menu.java create mode 100644 src/main/java/com/javarush/karpeev/constants/Constants.java create mode 100644 src/main/java/com/javarush/karpeev/constants/Message.java create mode 100644 src/main/java/com/javarush/karpeev/exceptions/FileForReadNotFoundException.java create mode 100644 src/main/java/com/javarush/karpeev/exceptions/FileForWriteNotFoundException.java create mode 100644 src/main/java/com/javarush/karpeev/fileManager/FileManager.java rename src/main/java/com/javarush/karpeev/{ => main}/Main.java (51%) diff --git a/src/main/java/com/javarush/karpeev/Menu.java b/src/main/java/com/javarush/karpeev/Menu.java deleted file mode 100644 index 0515acf..0000000 --- a/src/main/java/com/javarush/karpeev/Menu.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.javarush.karpeev; - -import java.util.Scanner; - -public class Menu { - StringBuilder textStringBuilder = new StringBuilder(); - private int key; - private int step; - - public int getKey() { - return key; - } - - Scanner input = new Scanner(System.in); - public void getMenu(){ - System.out.println("Добро пожаловать в шифровальщик!"); - inputText(); - inputKey(); - inputStep(); - } - - private StringBuilder inputText(){ - System.out.println("Введите текст для шифрования:"); - String text = input.nextLine(); - textStringBuilder.append(text); - return textStringBuilder; - } - private int inputKey (){ - System.out.print("Введите ключ (положительное целое число): "); - String keyText = input.nextLine(); - key = Integer.parseInt(keyText); - return key; - } - private int inputStep (){ - System.out.println(""" - Введите действие: - 1 - шифрование - 2 - дешифрование - 0 - выход"""); - String stepText = input.nextLine(); - step = Integer.parseInt(stepText); - return step; - } - - - -} diff --git a/src/main/java/com/javarush/karpeev/command/CryptText.java b/src/main/java/com/javarush/karpeev/command/CryptText.java new file mode 100644 index 0000000..ce3e73c --- /dev/null +++ b/src/main/java/com/javarush/karpeev/command/CryptText.java @@ -0,0 +1,84 @@ +package com.javarush.karpeev.command; + +import com.javarush.karpeev.constants.Constants; + +import java.util.Arrays; + +public class CryptText { + public char[] encrypt(char[] arrayInputText, int key) { + char[] arrayOutputText = new char[arrayInputText.length]; + for (int i = 0; i < arrayInputText.length; i++) { + if (arrayInputText[i] == '\n') { + arrayOutputText[i] = arrayInputText[i]; + continue; + } + for (int j = 0; j < Constants.alphabet.length; j++) { + if (arrayInputText[i] == Constants.alphabet[j]) { + if (j + key > Constants.alphabet.length - 1) { + arrayOutputText[i] = Constants.alphabet[(j + key) % Constants.alphabet.length]; + } else { + arrayOutputText[i] = Constants.alphabet[j + key]; + } + } + } + } + return arrayOutputText; + } + + public char[] decrypt(char[] arrayInputText, int key) { + char[] arrayOutputText = new char[arrayInputText.length]; + for (int i = 0; i < arrayInputText.length; i++) { + if (arrayInputText[i] == '\n') { + arrayOutputText[i] = arrayInputText[i]; + continue; + } + for (int j = 0; j < Constants.alphabet.length; j++) { + if (arrayInputText[i] == Constants.alphabet[j]) { + if (j - key < 0) { + arrayOutputText[i] = Constants.alphabet[Constants.alphabet.length + j - key]; + } else { + arrayOutputText[i] = Constants.alphabet[j - key]; + } + } + } + } + return arrayOutputText; + } + + public int bruteForce(char[] arrayDecodeText) { + int correctKey = 0; + int maxAmount = 0; + char[] bufferArrayChar; + arrayDecodeText = Arrays.copyOf(arrayDecodeText, Math.min(arrayDecodeText.length, Constants.LIMIT_SYMBOLS_FOR_FOUND_KEY)); + for (int key = 0; key < Constants.alphabet.length; key++) { + int amount = 0; + bufferArrayChar = decrypt(arrayDecodeText, key); + for (int i = 0; i < bufferArrayChar.length; i++) { + amount += isCorrectKey(bufferArrayChar, i); + } + if (amount > maxAmount) { + maxAmount = amount; + correctKey = key; + } + } + return correctKey; + } + + public int isCorrectKey(char[] arrayChar, int i) { + int amount = 0; + if (arrayChar[i] == ' ') { + amount++; + } + if (i + 2 < arrayChar.length && arrayChar[i] == ',' && arrayChar[i + 1] == ' ' && Character.isLetter(arrayChar[i + 2])) { + amount += Constants.COEFFICIENT_EFFICIENCY; + } + if (i + 2 < arrayChar.length && arrayChar[i] == ' ' && Character.isLetter(arrayChar[i + 1]) && arrayChar[i + 2] == ' ') { + amount++; + } + if (i + 2 < arrayChar.length && arrayChar[i] == '.' && arrayChar[i + 1] == ' ' && + Character.isLetter(arrayChar[i + 2]) && Character.isUpperCase(arrayChar[i + 2])) { + amount += Constants.COEFFICIENT_EFFICIENCY; + } + return amount; + } +} diff --git a/src/main/java/com/javarush/karpeev/console/Menu.java b/src/main/java/com/javarush/karpeev/console/Menu.java new file mode 100644 index 0000000..63054b1 --- /dev/null +++ b/src/main/java/com/javarush/karpeev/console/Menu.java @@ -0,0 +1,109 @@ +package com.javarush.karpeev.console; + +import com.javarush.karpeev.exceptions.FileForReadNotFoundException; +import com.javarush.karpeev.exceptions.FileForWriteNotFoundException; +import com.javarush.karpeev.fileManager.FileManager; +import com.javarush.karpeev.command.CryptText; +import com.javarush.karpeev.constants.Constants; +import com.javarush.karpeev.constants.Message; + +import java.util.Scanner; + +public class Menu { + private int key; + private int step = Constants.STEP_START; + + Scanner input = new Scanner(System.in); + + public void getMenu() { + System.out.println(Message.WELCOME); + while (step != Constants.STEP_EXIT) { + switch (getStep()) { + case 1 -> coding(); + case 2 -> decoding(); + case 3 -> foundKey(); + default -> System.out.println(Message.BAY); + } + } + } + + private void coding() { + FileManager fileManager = new FileManager(); + CryptText cryptText = new CryptText(); + getKey(); + try { + char[] arrayEncrypt = cryptText.encrypt(fileManager.varyTextInArrayChar(fileManager.getPathReadeFile()), key); + fileManager.writeTextInFile(arrayEncrypt, fileManager.getPathWriteFile(), arrayEncrypt.length); + System.out.println(Message.END_CODE + Message.NEXT_STEP); + } catch (FileForReadNotFoundException e) { + System.out.println(Message.NOT_FOUND_FILE_FOR_READ + Message.NEXT_STEP); + } catch (FileForWriteNotFoundException e) { + System.out.println(Message.NOT_FOUND_FILE_FOR_WRITE + Message.NEXT_STEP); + } + } + + private void decoding() { + FileManager fileManager = new FileManager(); + CryptText cryptText = new CryptText(); + getKey(); + try { + char[] arrayForDecrypt = cryptText.decrypt(fileManager.varyTextInArrayChar(fileManager.getPathReadeFile()), key); + fileManager.writeTextInFile(arrayForDecrypt, fileManager.getPathWriteFile(), arrayForDecrypt.length); + System.out.println(Message.END_DECODE + Message.NEXT_STEP); + } catch (FileForReadNotFoundException e) { + System.out.println(Message.NOT_FOUND_FILE_FOR_READ + Message.NEXT_STEP); + } catch (FileForWriteNotFoundException e) { + System.out.println(Message.NOT_FOUND_FILE_FOR_WRITE + Message.NEXT_STEP); + } + } + + private void foundKey() { + FileManager fileManager = new FileManager(); + CryptText cryptText = new CryptText(); + try { + char[] arrayDecrypt = fileManager.varyTextInArrayChar(fileManager.getPathFoundKey()); + key = cryptText.bruteForce(arrayDecrypt); + fileManager.writeTextInFile(cryptText.decrypt(arrayDecrypt, key), fileManager.getPathWriteFile(), arrayDecrypt.length); + System.out.println(Message.END_DECODE + Message.END_FOUND_KEY + key + Message.NEXT_STEP); + } catch (FileForReadNotFoundException e) { + System.out.println(Message.NOT_FOUND_FILE_FOR_READ + Message.NEXT_STEP); + } catch (FileForWriteNotFoundException e) { + System.out.println(Message.NOT_FOUND_FILE_FOR_WRITE + Message.NEXT_STEP); + } + } + + private int getStep() { + while (true) { + System.out.println(Message.MENU); + try { + step = Integer.parseInt(input.nextLine()); + } catch (NumberFormatException e) { + System.out.println(Message.NOT_NUMBER); + continue; + } + if (step < Constants.INTERVAL_STEP_MENU_START || step > Constants.INTERVAL_STEP_MENU_END) { + System.out.println(Message.NUMBER_NOT_IN_MENU); + } else { + break; + } + } + return step; + } + + public void getKey() { + while (true) { + System.out.print(Message.INPUT_KEY + (Constants.alphabet.length - 1) + ": "); + try { + key = Integer.parseInt(input.nextLine()); + } catch (NumberFormatException e) { + System.out.println(Message.NOT_NUMBER_KEY + (Constants.alphabet.length - 1) + ": "); + continue; + } + if (key < 1 || key > Constants.alphabet.length - 1) { + System.out.println(Message.FALSE_NUMBER + (Constants.alphabet.length - 1) + ": "); + } else { + break; + } + } + } +} \ No newline at end of file diff --git a/src/main/java/com/javarush/karpeev/constants/Constants.java b/src/main/java/com/javarush/karpeev/constants/Constants.java new file mode 100644 index 0000000..4c5a5ce --- /dev/null +++ b/src/main/java/com/javarush/karpeev/constants/Constants.java @@ -0,0 +1,20 @@ +package com.javarush.karpeev.constants; +public class Constants { + public static final char[] alphabet = {'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', + 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', + 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я', + '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', + 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', + 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', + 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я', + '~', '!', '@', '#', '$', '№', ':', '^', '&', '?', '*', '(', ')', '{', '}', '-', '«', '»', + '_', ',', '/', '.', '…', '|', '<', '>', '+', ';', '%', '"', '`', '=', '\'', '\\', ' ', '—'}; + + public static final int COEFFICIENT_EFFICIENCY = 10; + public static final int LIMIT_SYMBOLS_FOR_FOUND_KEY = 1000; + public static final int STEP_START = -1; + public static final int INTERVAL_STEP_MENU_START = 0; + public static final int INTERVAL_STEP_MENU_END = 3; + public static final int STEP_EXIT = 0; + +} \ No newline at end of file diff --git a/src/main/java/com/javarush/karpeev/constants/Message.java b/src/main/java/com/javarush/karpeev/constants/Message.java new file mode 100644 index 0000000..625c58f --- /dev/null +++ b/src/main/java/com/javarush/karpeev/constants/Message.java @@ -0,0 +1,21 @@ +package com.javarush.karpeev.constants; + +public class Message { + public static final String NOT_NUMBER = "Вы ввели текст или нецелое число. Введите число от 0 до 3"; + public static final String NOT_NUMBER_KEY = "Вы ввели текст или нецелое число. Введите целое число от 1 до "; + public static final String INPUT_PATH_READ_FILE = "Введите адрес файла с текстом для шифрования: "; + public static final String INPUT_PATH_FOR_FOUND_KEY = "Введите адрес зашифрованного текстового файла для поиска ключа: "; + public static final String INPUT_PATH_WRITE_FILE = "Введите адрес файла для записи: "; + public static final String FALSE_NUMBER = "Вы ввели число, которое не входит в диапазон от 1 до "; + public static final String NUMBER_NOT_IN_MENU = "\nЧисло не соответствует входному условию. Введите число от 0 до 3"; + public static final String MENU = "1 - Шифрование\n2 - Расшифровка\n3 - Поиск ключа расшифровки\n0 - Выход"; + public static final String WELCOME = "\nДобро пожаловать в шифратор!\n\nВведите действие в соответствии с пунктом в меню:"; + public static final String INPUT_KEY = "Введите ключ - положительное целое число от 1 до "; + public static final String NEXT_STEP = "\nДля дальнейших действий выберите пункт в меню.\n"; + public static final String END_CODE = "Шифрование выполнено!"; + public static final String END_DECODE = "Расшифровка выполнена! "; + public static final String END_FOUND_KEY = "Поиск ключа выполнен! \nКорректный ключ: "; + public static final String NOT_FOUND_FILE_FOR_READ = "\nФайл для чтения текста не найден! Попробуйте ещё раз\n"; + public static final String NOT_FOUND_FILE_FOR_WRITE = "\nФайл для записи не найден! Попробуйте ещё раз\n"; + public static final String BAY = "До скорой встречи!"; +} diff --git a/src/main/java/com/javarush/karpeev/exceptions/FileForReadNotFoundException.java b/src/main/java/com/javarush/karpeev/exceptions/FileForReadNotFoundException.java new file mode 100644 index 0000000..54c9175 --- /dev/null +++ b/src/main/java/com/javarush/karpeev/exceptions/FileForReadNotFoundException.java @@ -0,0 +1,8 @@ +package com.javarush.karpeev.exceptions; + +import java.io.IOException; + +public class FileForReadNotFoundException extends IOException { + public FileForReadNotFoundException() { + } +} \ No newline at end of file diff --git a/src/main/java/com/javarush/karpeev/exceptions/FileForWriteNotFoundException.java b/src/main/java/com/javarush/karpeev/exceptions/FileForWriteNotFoundException.java new file mode 100644 index 0000000..914a105 --- /dev/null +++ b/src/main/java/com/javarush/karpeev/exceptions/FileForWriteNotFoundException.java @@ -0,0 +1,8 @@ +package com.javarush.karpeev.exceptions; + +import java.io.IOException; + +public class FileForWriteNotFoundException extends IOException { + public FileForWriteNotFoundException() { + } +} \ No newline at end of file diff --git a/src/main/java/com/javarush/karpeev/fileManager/FileManager.java b/src/main/java/com/javarush/karpeev/fileManager/FileManager.java new file mode 100644 index 0000000..8e7aecb --- /dev/null +++ b/src/main/java/com/javarush/karpeev/fileManager/FileManager.java @@ -0,0 +1,53 @@ +package com.javarush.karpeev.fileManager; + +import com.javarush.karpeev.exceptions.FileForReadNotFoundException; +import com.javarush.karpeev.exceptions.FileForWriteNotFoundException; +import com.javarush.karpeev.constants.Message; + +import java.io.*; +import java.util.Scanner; + +public class FileManager { + Scanner scanner = new Scanner(System.in); + + public char[] varyTextInArrayChar(String addressText) throws FileForReadNotFoundException { + StringBuilder textBuffer = new StringBuilder(); + try (BufferedReader reader = new BufferedReader(new FileReader(addressText))) { + while (reader.ready()) { + textBuffer.append(reader.readLine()).append('\n'); + } + } catch (IOException e) { + throw new FileForReadNotFoundException(); + } + textBuffer.deleteCharAt(textBuffer.length() - 1); + return textBuffer.toString().toCharArray(); + } + + public void writeTextInFile(char[] mas, String addressFile, int len) throws FileForWriteNotFoundException { + try (BufferedWriter writer = new BufferedWriter(new FileWriter(addressFile))) { + writer.write(mas, 0, len); + } catch (IOException e) { + throw new FileForWriteNotFoundException(); + } + } + + public String getPathReadeFile() { + System.out.print(Message.INPUT_PATH_READ_FILE); + return scanner.nextLine(); + } + + public String getPathFoundKey() { + System.out.print(Message.INPUT_PATH_FOR_FOUND_KEY); + return scanner.nextLine(); + } + + public String getPathWriteFile() throws FileForWriteNotFoundException { + System.out.print(Message.INPUT_PATH_WRITE_FILE); + String addressFileForWrite = scanner.nextLine(); + File file = new File(addressFileForWrite); + if (!file.exists()) { + throw new FileForWriteNotFoundException(); + } + return addressFileForWrite; + } +} diff --git a/src/main/java/com/javarush/karpeev/Main.java b/src/main/java/com/javarush/karpeev/main/Main.java similarity index 51% rename from src/main/java/com/javarush/karpeev/Main.java rename to src/main/java/com/javarush/karpeev/main/Main.java index 6fffb3d..5ba054d 100644 --- a/src/main/java/com/javarush/karpeev/Main.java +++ b/src/main/java/com/javarush/karpeev/main/Main.java @@ -1,10 +1,10 @@ -package com.javarush.karpeev; +package com.javarush.karpeev.main; + +import com.javarush.karpeev.console.Menu; public class Main { public static void main(String[] args) { Menu menu = new Menu(); menu.getMenu(); - - System.out.println("text " + menu.textStringBuilder + " c key " + menu.getKey()); } -} +} \ No newline at end of file From 97d09eb1c05728b774e7e63b5c2fe457c0624dae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D1=82=D0=B0=D0=BB=D0=B8=D0=B9?= Date: Wed, 3 Sep 2025 21:14:25 +0300 Subject: [PATCH 6/8] Fix Main on Runner --- src/main/java/com/javarush/karpeev/Main.java | 10 -- src/main/java/com/javarush/karpeev/Menu.java | 47 -------- .../javarush/karpeev/command/CryptText.java | 84 ++++++++++++++ .../com/javarush/karpeev/console/Menu.java | 109 ++++++++++++++++++ .../javarush/karpeev/constants/Constants.java | 20 ++++ .../javarush/karpeev/constants/Message.java | 21 ++++ .../FileForReadNotFoundException.java | 8 ++ .../FileForWriteNotFoundException.java | 8 ++ .../karpeev/fileManager/FileManager.java | 53 +++++++++ .../com/javarush/karpeev/main/Runner.java | 10 ++ 10 files changed, 313 insertions(+), 57 deletions(-) delete mode 100644 src/main/java/com/javarush/karpeev/Main.java delete mode 100644 src/main/java/com/javarush/karpeev/Menu.java create mode 100644 src/main/java/com/javarush/karpeev/command/CryptText.java create mode 100644 src/main/java/com/javarush/karpeev/console/Menu.java create mode 100644 src/main/java/com/javarush/karpeev/constants/Constants.java create mode 100644 src/main/java/com/javarush/karpeev/constants/Message.java create mode 100644 src/main/java/com/javarush/karpeev/exceptions/FileForReadNotFoundException.java create mode 100644 src/main/java/com/javarush/karpeev/exceptions/FileForWriteNotFoundException.java create mode 100644 src/main/java/com/javarush/karpeev/fileManager/FileManager.java create mode 100644 src/main/java/com/javarush/karpeev/main/Runner.java diff --git a/src/main/java/com/javarush/karpeev/Main.java b/src/main/java/com/javarush/karpeev/Main.java deleted file mode 100644 index 6fffb3d..0000000 --- a/src/main/java/com/javarush/karpeev/Main.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.javarush.karpeev; - -public class Main { - public static void main(String[] args) { - Menu menu = new Menu(); - menu.getMenu(); - - System.out.println("text " + menu.textStringBuilder + " c key " + menu.getKey()); - } -} diff --git a/src/main/java/com/javarush/karpeev/Menu.java b/src/main/java/com/javarush/karpeev/Menu.java deleted file mode 100644 index 0515acf..0000000 --- a/src/main/java/com/javarush/karpeev/Menu.java +++ /dev/null @@ -1,47 +0,0 @@ -package com.javarush.karpeev; - -import java.util.Scanner; - -public class Menu { - StringBuilder textStringBuilder = new StringBuilder(); - private int key; - private int step; - - public int getKey() { - return key; - } - - Scanner input = new Scanner(System.in); - public void getMenu(){ - System.out.println("Добро пожаловать в шифровальщик!"); - inputText(); - inputKey(); - inputStep(); - } - - private StringBuilder inputText(){ - System.out.println("Введите текст для шифрования:"); - String text = input.nextLine(); - textStringBuilder.append(text); - return textStringBuilder; - } - private int inputKey (){ - System.out.print("Введите ключ (положительное целое число): "); - String keyText = input.nextLine(); - key = Integer.parseInt(keyText); - return key; - } - private int inputStep (){ - System.out.println(""" - Введите действие: - 1 - шифрование - 2 - дешифрование - 0 - выход"""); - String stepText = input.nextLine(); - step = Integer.parseInt(stepText); - return step; - } - - - -} diff --git a/src/main/java/com/javarush/karpeev/command/CryptText.java b/src/main/java/com/javarush/karpeev/command/CryptText.java new file mode 100644 index 0000000..ce3e73c --- /dev/null +++ b/src/main/java/com/javarush/karpeev/command/CryptText.java @@ -0,0 +1,84 @@ +package com.javarush.karpeev.command; + +import com.javarush.karpeev.constants.Constants; + +import java.util.Arrays; + +public class CryptText { + public char[] encrypt(char[] arrayInputText, int key) { + char[] arrayOutputText = new char[arrayInputText.length]; + for (int i = 0; i < arrayInputText.length; i++) { + if (arrayInputText[i] == '\n') { + arrayOutputText[i] = arrayInputText[i]; + continue; + } + for (int j = 0; j < Constants.alphabet.length; j++) { + if (arrayInputText[i] == Constants.alphabet[j]) { + if (j + key > Constants.alphabet.length - 1) { + arrayOutputText[i] = Constants.alphabet[(j + key) % Constants.alphabet.length]; + } else { + arrayOutputText[i] = Constants.alphabet[j + key]; + } + } + } + } + return arrayOutputText; + } + + public char[] decrypt(char[] arrayInputText, int key) { + char[] arrayOutputText = new char[arrayInputText.length]; + for (int i = 0; i < arrayInputText.length; i++) { + if (arrayInputText[i] == '\n') { + arrayOutputText[i] = arrayInputText[i]; + continue; + } + for (int j = 0; j < Constants.alphabet.length; j++) { + if (arrayInputText[i] == Constants.alphabet[j]) { + if (j - key < 0) { + arrayOutputText[i] = Constants.alphabet[Constants.alphabet.length + j - key]; + } else { + arrayOutputText[i] = Constants.alphabet[j - key]; + } + } + } + } + return arrayOutputText; + } + + public int bruteForce(char[] arrayDecodeText) { + int correctKey = 0; + int maxAmount = 0; + char[] bufferArrayChar; + arrayDecodeText = Arrays.copyOf(arrayDecodeText, Math.min(arrayDecodeText.length, Constants.LIMIT_SYMBOLS_FOR_FOUND_KEY)); + for (int key = 0; key < Constants.alphabet.length; key++) { + int amount = 0; + bufferArrayChar = decrypt(arrayDecodeText, key); + for (int i = 0; i < bufferArrayChar.length; i++) { + amount += isCorrectKey(bufferArrayChar, i); + } + if (amount > maxAmount) { + maxAmount = amount; + correctKey = key; + } + } + return correctKey; + } + + public int isCorrectKey(char[] arrayChar, int i) { + int amount = 0; + if (arrayChar[i] == ' ') { + amount++; + } + if (i + 2 < arrayChar.length && arrayChar[i] == ',' && arrayChar[i + 1] == ' ' && Character.isLetter(arrayChar[i + 2])) { + amount += Constants.COEFFICIENT_EFFICIENCY; + } + if (i + 2 < arrayChar.length && arrayChar[i] == ' ' && Character.isLetter(arrayChar[i + 1]) && arrayChar[i + 2] == ' ') { + amount++; + } + if (i + 2 < arrayChar.length && arrayChar[i] == '.' && arrayChar[i + 1] == ' ' && + Character.isLetter(arrayChar[i + 2]) && Character.isUpperCase(arrayChar[i + 2])) { + amount += Constants.COEFFICIENT_EFFICIENCY; + } + return amount; + } +} diff --git a/src/main/java/com/javarush/karpeev/console/Menu.java b/src/main/java/com/javarush/karpeev/console/Menu.java new file mode 100644 index 0000000..63054b1 --- /dev/null +++ b/src/main/java/com/javarush/karpeev/console/Menu.java @@ -0,0 +1,109 @@ +package com.javarush.karpeev.console; + +import com.javarush.karpeev.exceptions.FileForReadNotFoundException; +import com.javarush.karpeev.exceptions.FileForWriteNotFoundException; +import com.javarush.karpeev.fileManager.FileManager; +import com.javarush.karpeev.command.CryptText; +import com.javarush.karpeev.constants.Constants; +import com.javarush.karpeev.constants.Message; + +import java.util.Scanner; + +public class Menu { + private int key; + private int step = Constants.STEP_START; + + Scanner input = new Scanner(System.in); + + public void getMenu() { + System.out.println(Message.WELCOME); + while (step != Constants.STEP_EXIT) { + switch (getStep()) { + case 1 -> coding(); + case 2 -> decoding(); + case 3 -> foundKey(); + default -> System.out.println(Message.BAY); + } + } + } + + private void coding() { + FileManager fileManager = new FileManager(); + CryptText cryptText = new CryptText(); + getKey(); + try { + char[] arrayEncrypt = cryptText.encrypt(fileManager.varyTextInArrayChar(fileManager.getPathReadeFile()), key); + fileManager.writeTextInFile(arrayEncrypt, fileManager.getPathWriteFile(), arrayEncrypt.length); + System.out.println(Message.END_CODE + Message.NEXT_STEP); + } catch (FileForReadNotFoundException e) { + System.out.println(Message.NOT_FOUND_FILE_FOR_READ + Message.NEXT_STEP); + } catch (FileForWriteNotFoundException e) { + System.out.println(Message.NOT_FOUND_FILE_FOR_WRITE + Message.NEXT_STEP); + } + } + + private void decoding() { + FileManager fileManager = new FileManager(); + CryptText cryptText = new CryptText(); + getKey(); + try { + char[] arrayForDecrypt = cryptText.decrypt(fileManager.varyTextInArrayChar(fileManager.getPathReadeFile()), key); + fileManager.writeTextInFile(arrayForDecrypt, fileManager.getPathWriteFile(), arrayForDecrypt.length); + System.out.println(Message.END_DECODE + Message.NEXT_STEP); + } catch (FileForReadNotFoundException e) { + System.out.println(Message.NOT_FOUND_FILE_FOR_READ + Message.NEXT_STEP); + } catch (FileForWriteNotFoundException e) { + System.out.println(Message.NOT_FOUND_FILE_FOR_WRITE + Message.NEXT_STEP); + } + } + + private void foundKey() { + FileManager fileManager = new FileManager(); + CryptText cryptText = new CryptText(); + try { + char[] arrayDecrypt = fileManager.varyTextInArrayChar(fileManager.getPathFoundKey()); + key = cryptText.bruteForce(arrayDecrypt); + fileManager.writeTextInFile(cryptText.decrypt(arrayDecrypt, key), fileManager.getPathWriteFile(), arrayDecrypt.length); + System.out.println(Message.END_DECODE + Message.END_FOUND_KEY + key + Message.NEXT_STEP); + } catch (FileForReadNotFoundException e) { + System.out.println(Message.NOT_FOUND_FILE_FOR_READ + Message.NEXT_STEP); + } catch (FileForWriteNotFoundException e) { + System.out.println(Message.NOT_FOUND_FILE_FOR_WRITE + Message.NEXT_STEP); + } + } + + private int getStep() { + while (true) { + System.out.println(Message.MENU); + try { + step = Integer.parseInt(input.nextLine()); + } catch (NumberFormatException e) { + System.out.println(Message.NOT_NUMBER); + continue; + } + if (step < Constants.INTERVAL_STEP_MENU_START || step > Constants.INTERVAL_STEP_MENU_END) { + System.out.println(Message.NUMBER_NOT_IN_MENU); + } else { + break; + } + } + return step; + } + + public void getKey() { + while (true) { + System.out.print(Message.INPUT_KEY + (Constants.alphabet.length - 1) + ": "); + try { + key = Integer.parseInt(input.nextLine()); + } catch (NumberFormatException e) { + System.out.println(Message.NOT_NUMBER_KEY + (Constants.alphabet.length - 1) + ": "); + continue; + } + if (key < 1 || key > Constants.alphabet.length - 1) { + System.out.println(Message.FALSE_NUMBER + (Constants.alphabet.length - 1) + ": "); + } else { + break; + } + } + } +} \ No newline at end of file diff --git a/src/main/java/com/javarush/karpeev/constants/Constants.java b/src/main/java/com/javarush/karpeev/constants/Constants.java new file mode 100644 index 0000000..4c5a5ce --- /dev/null +++ b/src/main/java/com/javarush/karpeev/constants/Constants.java @@ -0,0 +1,20 @@ +package com.javarush.karpeev.constants; +public class Constants { + public static final char[] alphabet = {'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', + 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', + 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я', + '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', + 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', + 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', + 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я', + '~', '!', '@', '#', '$', '№', ':', '^', '&', '?', '*', '(', ')', '{', '}', '-', '«', '»', + '_', ',', '/', '.', '…', '|', '<', '>', '+', ';', '%', '"', '`', '=', '\'', '\\', ' ', '—'}; + + public static final int COEFFICIENT_EFFICIENCY = 10; + public static final int LIMIT_SYMBOLS_FOR_FOUND_KEY = 1000; + public static final int STEP_START = -1; + public static final int INTERVAL_STEP_MENU_START = 0; + public static final int INTERVAL_STEP_MENU_END = 3; + public static final int STEP_EXIT = 0; + +} \ No newline at end of file diff --git a/src/main/java/com/javarush/karpeev/constants/Message.java b/src/main/java/com/javarush/karpeev/constants/Message.java new file mode 100644 index 0000000..625c58f --- /dev/null +++ b/src/main/java/com/javarush/karpeev/constants/Message.java @@ -0,0 +1,21 @@ +package com.javarush.karpeev.constants; + +public class Message { + public static final String NOT_NUMBER = "Вы ввели текст или нецелое число. Введите число от 0 до 3"; + public static final String NOT_NUMBER_KEY = "Вы ввели текст или нецелое число. Введите целое число от 1 до "; + public static final String INPUT_PATH_READ_FILE = "Введите адрес файла с текстом для шифрования: "; + public static final String INPUT_PATH_FOR_FOUND_KEY = "Введите адрес зашифрованного текстового файла для поиска ключа: "; + public static final String INPUT_PATH_WRITE_FILE = "Введите адрес файла для записи: "; + public static final String FALSE_NUMBER = "Вы ввели число, которое не входит в диапазон от 1 до "; + public static final String NUMBER_NOT_IN_MENU = "\nЧисло не соответствует входному условию. Введите число от 0 до 3"; + public static final String MENU = "1 - Шифрование\n2 - Расшифровка\n3 - Поиск ключа расшифровки\n0 - Выход"; + public static final String WELCOME = "\nДобро пожаловать в шифратор!\n\nВведите действие в соответствии с пунктом в меню:"; + public static final String INPUT_KEY = "Введите ключ - положительное целое число от 1 до "; + public static final String NEXT_STEP = "\nДля дальнейших действий выберите пункт в меню.\n"; + public static final String END_CODE = "Шифрование выполнено!"; + public static final String END_DECODE = "Расшифровка выполнена! "; + public static final String END_FOUND_KEY = "Поиск ключа выполнен! \nКорректный ключ: "; + public static final String NOT_FOUND_FILE_FOR_READ = "\nФайл для чтения текста не найден! Попробуйте ещё раз\n"; + public static final String NOT_FOUND_FILE_FOR_WRITE = "\nФайл для записи не найден! Попробуйте ещё раз\n"; + public static final String BAY = "До скорой встречи!"; +} diff --git a/src/main/java/com/javarush/karpeev/exceptions/FileForReadNotFoundException.java b/src/main/java/com/javarush/karpeev/exceptions/FileForReadNotFoundException.java new file mode 100644 index 0000000..54c9175 --- /dev/null +++ b/src/main/java/com/javarush/karpeev/exceptions/FileForReadNotFoundException.java @@ -0,0 +1,8 @@ +package com.javarush.karpeev.exceptions; + +import java.io.IOException; + +public class FileForReadNotFoundException extends IOException { + public FileForReadNotFoundException() { + } +} \ No newline at end of file diff --git a/src/main/java/com/javarush/karpeev/exceptions/FileForWriteNotFoundException.java b/src/main/java/com/javarush/karpeev/exceptions/FileForWriteNotFoundException.java new file mode 100644 index 0000000..914a105 --- /dev/null +++ b/src/main/java/com/javarush/karpeev/exceptions/FileForWriteNotFoundException.java @@ -0,0 +1,8 @@ +package com.javarush.karpeev.exceptions; + +import java.io.IOException; + +public class FileForWriteNotFoundException extends IOException { + public FileForWriteNotFoundException() { + } +} \ No newline at end of file diff --git a/src/main/java/com/javarush/karpeev/fileManager/FileManager.java b/src/main/java/com/javarush/karpeev/fileManager/FileManager.java new file mode 100644 index 0000000..8e7aecb --- /dev/null +++ b/src/main/java/com/javarush/karpeev/fileManager/FileManager.java @@ -0,0 +1,53 @@ +package com.javarush.karpeev.fileManager; + +import com.javarush.karpeev.exceptions.FileForReadNotFoundException; +import com.javarush.karpeev.exceptions.FileForWriteNotFoundException; +import com.javarush.karpeev.constants.Message; + +import java.io.*; +import java.util.Scanner; + +public class FileManager { + Scanner scanner = new Scanner(System.in); + + public char[] varyTextInArrayChar(String addressText) throws FileForReadNotFoundException { + StringBuilder textBuffer = new StringBuilder(); + try (BufferedReader reader = new BufferedReader(new FileReader(addressText))) { + while (reader.ready()) { + textBuffer.append(reader.readLine()).append('\n'); + } + } catch (IOException e) { + throw new FileForReadNotFoundException(); + } + textBuffer.deleteCharAt(textBuffer.length() - 1); + return textBuffer.toString().toCharArray(); + } + + public void writeTextInFile(char[] mas, String addressFile, int len) throws FileForWriteNotFoundException { + try (BufferedWriter writer = new BufferedWriter(new FileWriter(addressFile))) { + writer.write(mas, 0, len); + } catch (IOException e) { + throw new FileForWriteNotFoundException(); + } + } + + public String getPathReadeFile() { + System.out.print(Message.INPUT_PATH_READ_FILE); + return scanner.nextLine(); + } + + public String getPathFoundKey() { + System.out.print(Message.INPUT_PATH_FOR_FOUND_KEY); + return scanner.nextLine(); + } + + public String getPathWriteFile() throws FileForWriteNotFoundException { + System.out.print(Message.INPUT_PATH_WRITE_FILE); + String addressFileForWrite = scanner.nextLine(); + File file = new File(addressFileForWrite); + if (!file.exists()) { + throw new FileForWriteNotFoundException(); + } + return addressFileForWrite; + } +} diff --git a/src/main/java/com/javarush/karpeev/main/Runner.java b/src/main/java/com/javarush/karpeev/main/Runner.java new file mode 100644 index 0000000..71ca721 --- /dev/null +++ b/src/main/java/com/javarush/karpeev/main/Runner.java @@ -0,0 +1,10 @@ +package com.javarush.karpeev.main; + +import com.javarush.karpeev.console.Menu; + +public class Runner { + public static void main(String[] args) { + Menu menu = new Menu(); + menu.getMenu(); + } +} \ No newline at end of file From adf901766c9111f52264cb883ba97eaaa29b3e58 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D1=82=D0=B0=D0=BB=D0=B8=D0=B9?= Date: Wed, 3 Sep 2025 22:32:40 +0300 Subject: [PATCH 7/8] Fix Main --- src/main/java/com/javarush/karpeev/main/Main.java | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 src/main/java/com/javarush/karpeev/main/Main.java diff --git a/src/main/java/com/javarush/karpeev/main/Main.java b/src/main/java/com/javarush/karpeev/main/Main.java new file mode 100644 index 0000000..0d8e622 --- /dev/null +++ b/src/main/java/com/javarush/karpeev/main/Main.java @@ -0,0 +1,4 @@ +package com.javarush.karpeev.main; + +public class Main { +} From b38bc1776dbd40433b47584d982487744a7e0cce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D1=82=D0=B0=D0=BB=D0=B8=D0=B9?= Date: Fri, 5 Sep 2025 20:09:42 +0300 Subject: [PATCH 8/8] Fix All --- .../javarush/karpeev/command/CryptText.java | 20 +++++++++---------- .../com/javarush/karpeev/console/Menu.java | 6 +++--- .../javarush/karpeev/constants/Constants.java | 20 ++++++++++++------- .../javarush/karpeev/constants/Message.java | 1 + .../karpeev/fileManager/FileManager.java | 17 ++++++++-------- .../karpeev/main/{Run.java => Runner.java} | 2 +- 6 files changed, 37 insertions(+), 29 deletions(-) rename src/main/java/com/javarush/karpeev/main/{Run.java => Runner.java} (89%) diff --git a/src/main/java/com/javarush/karpeev/command/CryptText.java b/src/main/java/com/javarush/karpeev/command/CryptText.java index ce3e73c..5a82ed7 100644 --- a/src/main/java/com/javarush/karpeev/command/CryptText.java +++ b/src/main/java/com/javarush/karpeev/command/CryptText.java @@ -51,13 +51,13 @@ public int bruteForce(char[] arrayDecodeText) { char[] bufferArrayChar; arrayDecodeText = Arrays.copyOf(arrayDecodeText, Math.min(arrayDecodeText.length, Constants.LIMIT_SYMBOLS_FOR_FOUND_KEY)); for (int key = 0; key < Constants.alphabet.length; key++) { - int amount = 0; + int amountConjunction = 0; bufferArrayChar = decrypt(arrayDecodeText, key); for (int i = 0; i < bufferArrayChar.length; i++) { - amount += isCorrectKey(bufferArrayChar, i); + amountConjunction += isCorrectKey(bufferArrayChar, i); } - if (amount > maxAmount) { - maxAmount = amount; + if (amountConjunction > maxAmount) { + maxAmount = amountConjunction; correctKey = key; } } @@ -65,20 +65,20 @@ public int bruteForce(char[] arrayDecodeText) { } public int isCorrectKey(char[] arrayChar, int i) { - int amount = 0; + int amountConjunction = 0; if (arrayChar[i] == ' ') { - amount++; + amountConjunction++; } if (i + 2 < arrayChar.length && arrayChar[i] == ',' && arrayChar[i + 1] == ' ' && Character.isLetter(arrayChar[i + 2])) { - amount += Constants.COEFFICIENT_EFFICIENCY; + amountConjunction += Constants.COEFFICIENT_EFFICIENCY; } if (i + 2 < arrayChar.length && arrayChar[i] == ' ' && Character.isLetter(arrayChar[i + 1]) && arrayChar[i + 2] == ' ') { - amount++; + amountConjunction++; } if (i + 2 < arrayChar.length && arrayChar[i] == '.' && arrayChar[i + 1] == ' ' && Character.isLetter(arrayChar[i + 2]) && Character.isUpperCase(arrayChar[i + 2])) { - amount += Constants.COEFFICIENT_EFFICIENCY; + amountConjunction += Constants.COEFFICIENT_EFFICIENCY; } - return amount; + return amountConjunction; } } diff --git a/src/main/java/com/javarush/karpeev/console/Menu.java b/src/main/java/com/javarush/karpeev/console/Menu.java index 63054b1..9c1695b 100644 --- a/src/main/java/com/javarush/karpeev/console/Menu.java +++ b/src/main/java/com/javarush/karpeev/console/Menu.java @@ -33,7 +33,7 @@ private void coding() { getKey(); try { char[] arrayEncrypt = cryptText.encrypt(fileManager.varyTextInArrayChar(fileManager.getPathReadeFile()), key); - fileManager.writeTextInFile(arrayEncrypt, fileManager.getPathWriteFile(), arrayEncrypt.length); + fileManager.writeTextInFile(fileManager.getPathWriteFile(), arrayEncrypt, arrayEncrypt.length); System.out.println(Message.END_CODE + Message.NEXT_STEP); } catch (FileForReadNotFoundException e) { System.out.println(Message.NOT_FOUND_FILE_FOR_READ + Message.NEXT_STEP); @@ -48,7 +48,7 @@ private void decoding() { getKey(); try { char[] arrayForDecrypt = cryptText.decrypt(fileManager.varyTextInArrayChar(fileManager.getPathReadeFile()), key); - fileManager.writeTextInFile(arrayForDecrypt, fileManager.getPathWriteFile(), arrayForDecrypt.length); + fileManager.writeTextInFile(fileManager.getPathWriteFile(), arrayForDecrypt, arrayForDecrypt.length); System.out.println(Message.END_DECODE + Message.NEXT_STEP); } catch (FileForReadNotFoundException e) { System.out.println(Message.NOT_FOUND_FILE_FOR_READ + Message.NEXT_STEP); @@ -63,7 +63,7 @@ private void foundKey() { try { char[] arrayDecrypt = fileManager.varyTextInArrayChar(fileManager.getPathFoundKey()); key = cryptText.bruteForce(arrayDecrypt); - fileManager.writeTextInFile(cryptText.decrypt(arrayDecrypt, key), fileManager.getPathWriteFile(), arrayDecrypt.length); + fileManager.writeTextInFile(fileManager.getPathWriteFile(), cryptText.decrypt(arrayDecrypt, key), arrayDecrypt.length); System.out.println(Message.END_DECODE + Message.END_FOUND_KEY + key + Message.NEXT_STEP); } catch (FileForReadNotFoundException e) { System.out.println(Message.NOT_FOUND_FILE_FOR_READ + Message.NEXT_STEP); diff --git a/src/main/java/com/javarush/karpeev/constants/Constants.java b/src/main/java/com/javarush/karpeev/constants/Constants.java index 4c5a5ce..e43efd0 100644 --- a/src/main/java/com/javarush/karpeev/constants/Constants.java +++ b/src/main/java/com/javarush/karpeev/constants/Constants.java @@ -1,14 +1,20 @@ package com.javarush.karpeev.constants; public class Constants { - public static final char[] alphabet = {'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', - 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', - 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я', + public static final char[] alphabet = { + 'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', + 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', + 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я', '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', - 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', - 'Й', 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', 'Х', - 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я', + 'А', 'Б', 'В', 'Г', 'Д', 'Е', 'Ё', 'Ж', 'З', 'И', 'Й', + 'К', 'Л', 'М', 'Н', 'О', 'П', 'Р', 'С', 'Т', 'У', 'Ф', + 'Х', 'Ц', 'Ч', 'Ш', 'Щ', 'Ъ', 'Ы', 'Ь', 'Э', 'Ю', 'Я', '~', '!', '@', '#', '$', '№', ':', '^', '&', '?', '*', '(', ')', '{', '}', '-', '«', '»', - '_', ',', '/', '.', '…', '|', '<', '>', '+', ';', '%', '"', '`', '=', '\'', '\\', ' ', '—'}; + '_', ',', '/', '.', '…', '|', '<', '>', '+', ';', '%', '"', '`', '=', '\'', '\\', ' ', '—', + '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 static final int COEFFICIENT_EFFICIENCY = 10; public static final int LIMIT_SYMBOLS_FOR_FOUND_KEY = 1000; diff --git a/src/main/java/com/javarush/karpeev/constants/Message.java b/src/main/java/com/javarush/karpeev/constants/Message.java index 625c58f..66c58a8 100644 --- a/src/main/java/com/javarush/karpeev/constants/Message.java +++ b/src/main/java/com/javarush/karpeev/constants/Message.java @@ -19,3 +19,4 @@ public class Message { public static final String NOT_FOUND_FILE_FOR_WRITE = "\nФайл для записи не найден! Попробуйте ещё раз\n"; public static final String BAY = "До скорой встречи!"; } + diff --git a/src/main/java/com/javarush/karpeev/fileManager/FileManager.java b/src/main/java/com/javarush/karpeev/fileManager/FileManager.java index 8e7aecb..851fae7 100644 --- a/src/main/java/com/javarush/karpeev/fileManager/FileManager.java +++ b/src/main/java/com/javarush/karpeev/fileManager/FileManager.java @@ -5,6 +5,8 @@ import com.javarush.karpeev.constants.Message; import java.io.*; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.Scanner; public class FileManager { @@ -23,8 +25,12 @@ public char[] varyTextInArrayChar(String addressText) throws FileForReadNotFound return textBuffer.toString().toCharArray(); } - public void writeTextInFile(char[] mas, String addressFile, int len) throws FileForWriteNotFoundException { - try (BufferedWriter writer = new BufferedWriter(new FileWriter(addressFile))) { + public void writeTextInFile(String addressFileForWrite, char[] mas, int len) throws FileForWriteNotFoundException { + File file = new File(addressFileForWrite); + if (!file.exists()) { + throw new FileForWriteNotFoundException(); + } + try (BufferedWriter writer = Files.newBufferedWriter(Path.of(addressFileForWrite))) { writer.write(mas, 0, len); } catch (IOException e) { throw new FileForWriteNotFoundException(); @@ -43,11 +49,6 @@ public String getPathFoundKey() { public String getPathWriteFile() throws FileForWriteNotFoundException { System.out.print(Message.INPUT_PATH_WRITE_FILE); - String addressFileForWrite = scanner.nextLine(); - File file = new File(addressFileForWrite); - if (!file.exists()) { - throw new FileForWriteNotFoundException(); - } - return addressFileForWrite; + return scanner.nextLine(); } } diff --git a/src/main/java/com/javarush/karpeev/main/Run.java b/src/main/java/com/javarush/karpeev/main/Runner.java similarity index 89% rename from src/main/java/com/javarush/karpeev/main/Run.java rename to src/main/java/com/javarush/karpeev/main/Runner.java index 20c3c87..93a9ab2 100644 --- a/src/main/java/com/javarush/karpeev/main/Run.java +++ b/src/main/java/com/javarush/karpeev/main/Runner.java @@ -2,7 +2,7 @@ import com.javarush.karpeev.console.Menu; -public class Run { +public class Runner { public static void main(String[] args) { Menu menu = new Menu(); menu.getMenu();