Расшифровка шифра Цезаря

108
25 сентября 2021, 19:10

Написал алгоритм, который шифрует текст методом Цезаря, с помощью таблицы ASCII: Моя программа шифрует строки, в которых используются русские и английские буквы, различные знаки препинания, пробелы и т.д.

  public class Chifr2 {
    public static void main(String[] args) {
        String str = "ннн ААА 000 <> ZZZ yyy"; //вводимый текст
        int key = 3;
        String new_str = "";
        String d = "";
        int c = 0;
        int y = 0;
        System.out.println((int) 'Я'); // здесь узнаем код буквы
        for (int j =0;j<str.length();j++) {
            int a = str.charAt(j);
            if (a <= 1071 && a>=1040) {
                    c = (str.charAt(j) + key);
                    y = (c - 1040) % 32 + 1040; // 1040 - это код буквы А, 32 - это кол-во букв
                    new_str += (char) y; // получаем букву по коду
                }
            else if (a>1071){
                c = (str.charAt(j) + key);
                y = (c - 1072) % 32 + 1072; // 1072 - это код буквы а, 32 - это кол-во букв
                new_str += (char) y; // получаем букву по коду
            }
            else if (a>=32 && a<=47){
                c = (str.charAt(j)+key);
                y = (c - 32) % 16 + 32;
                new_str += (char) y;
            }
            else if (a>47&&a<=57){
                c = (str.charAt(j)+key);
                y = (c - 47) % 10 + 47;
                new_str += (char) y;
            }
            else if (a>57&&a<=64){
                c = (str.charAt(j)+key);
                y = (c - 57) % 7 + 57;
                new_str += (char) y;
            }
            else if (a>64&&a<=90){
                c = (str.charAt(j)+key);
                y = (c - 64) % 26 + 64;
                new_str += (char) y;
            }
            else if(a>=97&&a<=122){
                c = (str.charAt(j)+key);
                y = (c - 97) % 26 + 97;
                new_str += (char) y;
            }
        }
        System.out.println( new_str); // выводимый текст
        }
}

Никак не могу понять как мне сделать расшифровку данного шифра (то есть как мне сделать так, чтобы ключ был отрицательным, но шифрование всё равно происходило правильно)

READ ALSO
Логическая ошибка в коде Java(Android Studio)

Логическая ошибка в коде Java(Android Studio)

Я новичок в Java и Android Studio, решил сделать Spinner для переключения темы приложения в настройках, но программа работает не корректно

213
split() по строковому литералу без удаления разделителя

split() по строковому литералу без удаления разделителя

Пробую найти правильное регулярное выражение, никак не выходит

227
Проблема с шифрованием

Проблема с шифрованием

Не получается выполнить задание, условие которого следующее: ТРАНСПОЗИЦИЯ С ФИКСИРОВАННЫМ ПЕРИОДОМ: В этом случае сообщение делится на группы...

109
Использование нескольких баз БД в Spring Boot

Использование нескольких баз БД в Spring Boot

Вопрос такой: Как подключить несколько БД к Spring Boot?

151