From be430d0d63f556f083480e12a158f8a737f2d25b Mon Sep 17 00:00:00 2001 From: Stanislav Bereznyakov Date: Wed, 20 Aug 2025 04:03:08 +0400 Subject: [PATCH 1/2] ADD folder bereznyakov --- src/main/java/com/javarush/bereznyakov/ConsoleRunner.java | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 src/main/java/com/javarush/bereznyakov/ConsoleRunner.java diff --git a/src/main/java/com/javarush/bereznyakov/ConsoleRunner.java b/src/main/java/com/javarush/bereznyakov/ConsoleRunner.java new file mode 100644 index 0000000..47d9839 --- /dev/null +++ b/src/main/java/com/javarush/bereznyakov/ConsoleRunner.java @@ -0,0 +1,7 @@ +package com.javarush.bereznyakov; + +public class ConsoleRunner { + public static void main(String[] args) { + System.out.println("Hello GITHUB!"); + } +} From 7319fbf65339dfad7cc25027f03478d5f372db4c Mon Sep 17 00:00:00 2001 From: Stanislav Bereznyakov Date: Wed, 22 Oct 2025 12:00:24 +0400 Subject: [PATCH 2/2] finish --- .../com/javarush/bereznyakov/Brutforce.java | 77 +++++++++++++++++++ .../javarush/bereznyakov/ConsoleRunner.java | 28 ++++++- .../java/com/javarush/bereznyakov/Decode.java | 36 +++++++++ .../java/com/javarush/bereznyakov/Encode.java | 44 +++++++++++ .../java/com/javarush/bereznyakov/Menu.java | 17 ++++ 5 files changed, 200 insertions(+), 2 deletions(-) create mode 100644 src/main/java/com/javarush/bereznyakov/Brutforce.java create mode 100644 src/main/java/com/javarush/bereznyakov/Decode.java create mode 100644 src/main/java/com/javarush/bereznyakov/Encode.java create mode 100644 src/main/java/com/javarush/bereznyakov/Menu.java diff --git a/src/main/java/com/javarush/bereznyakov/Brutforce.java b/src/main/java/com/javarush/bereznyakov/Brutforce.java new file mode 100644 index 0000000..5e9c7ce --- /dev/null +++ b/src/main/java/com/javarush/bereznyakov/Brutforce.java @@ -0,0 +1,77 @@ +package com.javarush.bereznyakov; + +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.Scanner; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class Brutforce { + + public static final String RU = "мои|твои|они|что-то|еще|что|это|куда|либо|нибудь|кто-то"; + + Brutforce() throws IOException { + System.out.println("Введите путь до файла:"); + Scanner scanner = new Scanner(System.in); + String path = scanner.nextLine(); + String temporaryPath = "C:\\Users\\berstix\\IdeaProjects\\CryptoAnalyzerPantera\\text\\outDecode.txt"; + + int bestKey = -1; + int maxCount = 0; + String bestText = ""; + + + String encryptedText = new String(Files.readAllBytes(Paths.get(path)), "UTF-8"); + + + for (int key = 0; key < 200; key++) { + StringBuilder decodedText = new StringBuilder(); + + + for (char c : encryptedText.toCharArray()) { + decodedText.append((char)(c - key)); + } + + String currentText = decodedText.toString(); + int count = 0; + + + Pattern pattern = Pattern.compile(RU); + Matcher matcher = pattern.matcher(currentText); + while (matcher.find()) { + count++; + } + + + if (count > maxCount) { + maxCount = count; + bestKey = key; + bestText = currentText; + } + } + + + if (bestKey != -1 && maxCount > 10) { // уменьшил порог для большей гибкости + try (BufferedWriter writer = new BufferedWriter(new FileWriter(temporaryPath))) { + writer.write(bestText); + } + System.out.println("Файл раскодирован ключом: " + bestKey); + System.out.println("Количество совпадений: " + maxCount); + System.out.println("Файл \"out\" раскодирован в \"outDecode.txt\""); + } else { + System.out.println("Не удалось найти подходящий ключ. Лучший ключ: " + bestKey + + ", совпадений: " + maxCount); + } + + scanner.close(); + } + + public static void main(String[] args) { + try { + new Brutforce(); + } catch (IOException e) { + System.err.println("Ошибка: " + e.getMessage()); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/javarush/bereznyakov/ConsoleRunner.java b/src/main/java/com/javarush/bereznyakov/ConsoleRunner.java index 47d9839..6b8ae72 100644 --- a/src/main/java/com/javarush/bereznyakov/ConsoleRunner.java +++ b/src/main/java/com/javarush/bereznyakov/ConsoleRunner.java @@ -1,7 +1,31 @@ package com.javarush.bereznyakov; +import java.io.*; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Scanner; + + public class ConsoleRunner { - public static void main(String[] args) { - System.out.println("Hello GITHUB!"); + public static void main(String[] args) throws IOException { + +// String text = "C:\\Users\\berstix\\IdeaProjects\\CryptoAnalyzerPantera\\text\\dict.txt"; +//C:\Users\berstix\IdeaProjects\CryptoAnalyzerPantera\text\dict.txt + + System.out.println(Menu.menuChoise); + Menu menu = new Menu(); + + + int numberOfMenu = menu.numberOfMenu; + if (numberOfMenu == 1){ + Encode encode = new Encode(); + + } else if (numberOfMenu == 2) { + Decode decode = new Decode(); + } else if (numberOfMenu ==3) { + Brutforce brutforce = new Brutforce(); + } + + } } diff --git a/src/main/java/com/javarush/bereznyakov/Decode.java b/src/main/java/com/javarush/bereznyakov/Decode.java new file mode 100644 index 0000000..ed0e712 --- /dev/null +++ b/src/main/java/com/javarush/bereznyakov/Decode.java @@ -0,0 +1,36 @@ +package com.javarush.bereznyakov; + +import java.io.*; +import java.util.Scanner; + +public class Decode { + Decode () throws IOException { + System.out.println("Введите путь до файла:"); + Scanner scanner = new Scanner(System.in); + String path = scanner.next(); + System.out.println(path); + + try { + FileInputStream fileInputStream = new FileInputStream(path); + InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8"); + BufferedReader bufferedReader = new BufferedReader(inputStreamReader, 200); + System.out.println("Введите ключ для декодирования"); + int numberOfCod = scanner.nextInt(); + int i; + + File file = new File("C:\\Users\\berstix\\IdeaProjects\\CryptoAnalyzerPantera\\text\\outDecode.txt"); + + BufferedWriter writer = new BufferedWriter(new FileWriter(file)); + + while ((i = bufferedReader.read())!= -1){ + i= i - numberOfCod; + System.out.print((char)i); + + + writer.write((char)i); + } + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/src/main/java/com/javarush/bereznyakov/Encode.java b/src/main/java/com/javarush/bereznyakov/Encode.java new file mode 100644 index 0000000..54be48c --- /dev/null +++ b/src/main/java/com/javarush/bereznyakov/Encode.java @@ -0,0 +1,44 @@ +package com.javarush.bereznyakov; + + +import java.io.*; +import java.util.Scanner; + +public class Encode { + + + +Encode() throws IOException { + System.out.println("Введите путь до файла:"); + Scanner scanner = new Scanner(System.in); + String path = scanner.next(); + System.out.println(path); + + try { FileInputStream fileInputStream = new FileInputStream(path); + InputStreamReader inputStreamReader = new InputStreamReader(fileInputStream, "UTF-8"); + BufferedReader bufferedReader = new BufferedReader(inputStreamReader, 200); + System.out.println("Введите ключ для кодирования"); + int numberOfCod = scanner.nextInt(); + int i; + + + File file = new File("C:\\Users\\berstix\\IdeaProjects\\CryptoAnalyzerPantera\\text\\out.txt"); + + BufferedWriter writer = new BufferedWriter(new FileWriter(file)); + + while ((i = bufferedReader.read())!= -1){ + i= i + numberOfCod; + System.out.print((char)i); + + + writer.write((char)i); + + } + } catch (IOException e) { + throw new RuntimeException(e); + } + +} + + +} diff --git a/src/main/java/com/javarush/bereznyakov/Menu.java b/src/main/java/com/javarush/bereznyakov/Menu.java new file mode 100644 index 0000000..fdefc88 --- /dev/null +++ b/src/main/java/com/javarush/bereznyakov/Menu.java @@ -0,0 +1,17 @@ +package com.javarush.bereznyakov; + +import java.io.IOException; +import java.util.Scanner; + +public class Menu { + static final String menuChoise ="Выберите что хотите сделать с файлом:\n" + + "1) закодировать файл выберите цифру 1\n" + + "2) раскодировать файл зная ключ кодировки, выберите цифру 2\n"+ + "3) раскодировать файл спомощью Brute force, выберите цифру 3"; + + + Scanner consnole = new Scanner(System.in); + int numberOfMenu = consnole.nextInt(); + + +}