From 3dfcd520d417155a2856c7107b0313020047e373 Mon Sep 17 00:00:00 2001 From: sam Date: Sun, 7 Sep 2025 20:53:33 +0300 Subject: [PATCH] Khramov Samuil, the project is ready! --- .../java/com/javarush/khramov/Alphabet.java | 55 ++++++++++++++++ .../javarush/khramov/CipherAndUnCipher.java | 51 +++++++++++++++ .../com/javarush/khramov/FileManager.java | 44 +++++++++++++ .../java/com/javarush/khramov/MainApp.java | 46 ++++++++++++++ .../java/com/javarush/khramov/PathAndKey.java | 63 +++++++++++++++++++ 5 files changed, 259 insertions(+) create mode 100644 src/main/java/com/javarush/khramov/Alphabet.java create mode 100644 src/main/java/com/javarush/khramov/CipherAndUnCipher.java create mode 100644 src/main/java/com/javarush/khramov/FileManager.java create mode 100644 src/main/java/com/javarush/khramov/MainApp.java create mode 100644 src/main/java/com/javarush/khramov/PathAndKey.java diff --git a/src/main/java/com/javarush/khramov/Alphabet.java b/src/main/java/com/javarush/khramov/Alphabet.java new file mode 100644 index 0000000..f81b528 --- /dev/null +++ b/src/main/java/com/javarush/khramov/Alphabet.java @@ -0,0 +1,55 @@ +package com.javarush.khramov; + +import java.util.HashMap; + +public class Alphabet { + + public final int hashEnAlphabet(String letter) { + + HashMap enAlphabet = new HashMap<>(); + enAlphabet.put("a", 1); enAlphabet.put("b", 2); enAlphabet.put("c", 3); + enAlphabet.put("d", 4); enAlphabet.put("e", 5); enAlphabet.put("f", 6); + enAlphabet.put("g", 7); enAlphabet.put("h", 8); enAlphabet.put("i", 9); + enAlphabet.put("j", 10); enAlphabet.put("k", 11); enAlphabet.put("l", 12); + enAlphabet.put("m", 13); enAlphabet.put("n", 14); enAlphabet.put("o", 15); + enAlphabet.put("p", 16); enAlphabet.put("q", 17); enAlphabet.put("r", 18); + enAlphabet.put("s", 19); enAlphabet.put("t", 20); enAlphabet.put("u", 21); + enAlphabet.put("v", 22); enAlphabet.put("w", 23); enAlphabet.put("x", 24); + enAlphabet.put("y", 25); enAlphabet.put("z", 26); + + return enAlphabet.get(letter); + } + + public final String letterEnAlphabet(int hash){ + + HashMap enAlphabet = new HashMap<>(); + enAlphabet.put(1, "a"); enAlphabet.put(2, "b"); enAlphabet.put(3, "c"); + enAlphabet.put(4, "d"); enAlphabet.put(5, "e"); enAlphabet.put(6, "f"); + enAlphabet.put(7, "g"); enAlphabet.put(8, "h"); enAlphabet.put(9, "i"); + enAlphabet.put(10, "j"); enAlphabet.put(11, "k"); enAlphabet.put(12, "l"); + enAlphabet.put(13, "m"); enAlphabet.put(14, "n"); enAlphabet.put(15, "o"); + enAlphabet.put(16, "p"); enAlphabet.put(17, "q"); enAlphabet.put(18, "r"); + enAlphabet.put(19, "s"); enAlphabet.put(20, "t"); enAlphabet.put(21, "u"); + enAlphabet.put(22, "v"); enAlphabet.put(23, "w"); enAlphabet.put(24, "x"); + enAlphabet.put(25, "y"); enAlphabet.put(26, "z"); + + return enAlphabet.get(hash); + } + + public final boolean booleanEnAlphabet(String letter) { + + HashMap enAlphabet = new HashMap<>(); + enAlphabet.put("a", 1); enAlphabet.put("b", 2); enAlphabet.put("c", 3); + enAlphabet.put("d", 4); enAlphabet.put("e", 5); enAlphabet.put("f", 6); + enAlphabet.put("g", 7); enAlphabet.put("h", 8); enAlphabet.put("i", 9); + enAlphabet.put("j", 10); enAlphabet.put("k", 11); enAlphabet.put("l", 12); + enAlphabet.put("m", 13); enAlphabet.put("n", 14); enAlphabet.put("o", 15); + enAlphabet.put("p", 16); enAlphabet.put("q", 17); enAlphabet.put("r", 18); + enAlphabet.put("s", 19); enAlphabet.put("t", 20); enAlphabet.put("u", 21); + enAlphabet.put("v", 22); enAlphabet.put("w", 23); enAlphabet.put("x", 24); + enAlphabet.put("y", 25); enAlphabet.put("z", 26); + + return enAlphabet.containsKey(letter); + } + +} diff --git a/src/main/java/com/javarush/khramov/CipherAndUnCipher.java b/src/main/java/com/javarush/khramov/CipherAndUnCipher.java new file mode 100644 index 0000000..79b0819 --- /dev/null +++ b/src/main/java/com/javarush/khramov/CipherAndUnCipher.java @@ -0,0 +1,51 @@ +package com.javarush.khramov; + +import java.util.ArrayList; +import java.util.List; + +public class CipherAndUnCipher { + FileManager fileManager = new FileManager(); + Alphabet alphabet = new Alphabet(); + + public void cipherList(List charList, int key, String encryptedFileAddress) { + + List cipherList = new ArrayList<>(); + + for (var i = 0; i < charList.size(); i++) { + String x = charList.get(i).toLowerCase(); + + if (alphabet.booleanEnAlphabet(x) == true) { + int a = alphabet.hashEnAlphabet(x); + if ((a + key) > 26) { + cipherList.add(alphabet.letterEnAlphabet((a + key) - 26)); + } else { + cipherList.add(alphabet.letterEnAlphabet(a + key)); + } + } else { + cipherList.add(x); + } + } + fileManager.writeFile(cipherList, encryptedFileAddress); + } + + public void unCipherList(List charList, int key, String encryptedFileAddress) { + List unCipherList = new ArrayList<>(); + + + for (var i = 0; i < charList.size(); i++) { + String x = charList.get(i).toLowerCase(); + + if (alphabet.booleanEnAlphabet(x) == true) { + int a = alphabet.hashEnAlphabet(x); + if ((a - key) < 1) { + unCipherList.add(alphabet.letterEnAlphabet(26 + (a - key))); + } else { + unCipherList.add(alphabet.letterEnAlphabet(a - key)); + } + } else { + unCipherList.add(x); + } + } + fileManager.writeFile(unCipherList, encryptedFileAddress); + } +} \ No newline at end of file diff --git a/src/main/java/com/javarush/khramov/FileManager.java b/src/main/java/com/javarush/khramov/FileManager.java new file mode 100644 index 0000000..7dc9441 --- /dev/null +++ b/src/main/java/com/javarush/khramov/FileManager.java @@ -0,0 +1,44 @@ +package com.javarush.khramov; + +import java.io.BufferedWriter; +import java.io.FileWriter; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.List; + +public class FileManager { + + public List readingFile(String fileAddress) { + List charList = new ArrayList<>(); + + try { + byte[] bytes = Files.readAllBytes(Paths.get(fileAddress)); + + for (byte b : bytes) { + char character = (char) b; + charList.add(String.valueOf(character)); + } + + System.out.println("Read characters: " + charList.size()); + } catch (IOException e) { + System.err.println("Error reading file: " + e.getMessage()); + } + + return charList; + } + + public void writeFile(List list, String encryptedFileAddress) { + + try (BufferedWriter writer = new BufferedWriter(new FileWriter(encryptedFileAddress))) { + for (String line : list) { + writer.write(line); + } + System.out.println("ready! "); + + } catch (IOException e) { + System.err.println("Error writing file: " + e.getMessage()); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/javarush/khramov/MainApp.java b/src/main/java/com/javarush/khramov/MainApp.java new file mode 100644 index 0000000..d08c0dc --- /dev/null +++ b/src/main/java/com/javarush/khramov/MainApp.java @@ -0,0 +1,46 @@ +package com.javarush.khramov; + +import java.io.InputStream; +import java.util.List; +import java.util.Scanner; + +public class MainApp { + public static void main(String[] args) { + while (true) { + System.out.println("Welcome to the program!"); + System.out.println("Select mode:"); + System.out.println("1. Encrypt text;"); + System.out.println("2. Decipher the text;"); + System.out.println("3. Exit."); + + InputStream stream = System.in; + Scanner console = new Scanner(stream); + byte input = console.nextByte(); + + CipherAndUnCipher cipherAndUnCipher = new CipherAndUnCipher(); + FileManager fileManager = new FileManager(); + + + if (input == 1) { + String fileAddress = PathAndKey.fileAddress(); + String encryptedFileAddress = PathAndKey.encryptedFileAddress(); + int key = PathAndKey.key(); + List list = fileManager.readingFile(fileAddress); + + cipherAndUnCipher.cipherList(list, key, encryptedFileAddress); + + } else if (input == 2) { + String fileAddress = PathAndKey.fileAddress(); + String encryptedFileAddress = PathAndKey.encryptedFileAddress(); + int key = PathAndKey.key(); + List list = fileManager.readingFile(fileAddress); + + cipherAndUnCipher.unCipherList(list, key, encryptedFileAddress); + + } else if (input == 3) { + System.out.println("Good Bye!"); + break; + } + } + } +} \ No newline at end of file diff --git a/src/main/java/com/javarush/khramov/PathAndKey.java b/src/main/java/com/javarush/khramov/PathAndKey.java new file mode 100644 index 0000000..00c19bd --- /dev/null +++ b/src/main/java/com/javarush/khramov/PathAndKey.java @@ -0,0 +1,63 @@ +package com.javarush.khramov; + +import java.io.InputStream; +import java.util.Scanner; + +public class PathAndKey { + + + public static String fileAddress() { + InputStream stream = System.in; + Scanner console = new Scanner(stream); + + System.out.println("Specify the path to the text file:"); + String fileAddress = console.nextLine(); + + return fileAddress; + } + + + public static String encryptedFileAddress() { + InputStream stream = System.in; + Scanner console = new Scanner(stream); + + System.out.println("Specify the path where to write the cipher:"); + String encryptedFileAddress = console.nextLine(); + + return encryptedFileAddress; + } + + + public static int key() { + InputStream stream = System.in; + Scanner console = new Scanner(stream); + + System.out.println("Enter the key for encoding:"); + int key; + try { + key = console.nextInt(); + } catch (Exception e) { + System.err.println("Error, check that the key is a number from 0 to 25."); + key = console.nextInt(); + } + + + while (true) { + + if (key >= 0 && key <= 25) { + break; + } else if (key < 0) { + System.out.println("The key can't be negative."); + System.out.println("Enter new key for encoding:"); + key = console.nextInt(); + } else if (key > 25) { + System.out.println("The key can't be greater than 25."); + System.out.println("Enter new key for encoding:"); + key = console.nextInt(); + } + } + + + return key; + } +}