Как пропустить пробелы и символы при чтении текстового файла и сохранить их для последующего использования

#java #intellij-idea #encryption #cypher

#java #intellij-idea #шифрование #cypher

Вопрос:

Итак, по сути, я создаю программу, которая является шифром Виженера.

Программа запрашивает у пользователя имя файла. Он спрашивает, хотят ли они зашифровать или расшифровать файл. Он проверяет, является ли файл пустым или нет.

Поскольку способ, которым мой шифратор

 public static String encrypt(String message, String key) {
    int stringLength = message.length(); // they've common length
    char[][] arrayTabula = arrayMatrix(); // table that you've created
    String encryptedText = "";

    for (int i = 0; i < stringLength; i  ) {

        // 97 is ascii code of 'a'.
        // We want to access first index when we have 'a';
        // means = (int) 'a' - 97 = 0;
        // Applying for both y part and x part.
        int keysIndex = key.charAt(i) - 97;
        int messagesIndex = message.charAt(i) - 97;

        //then correspondent `y` and `x` value is my encrypted char add it to my str
        encryptedText  = arrayTabula[keysIndex][messagesIndex];
    }
    return encryptedText;
}
 

и дешифратор

 public static void decrypt(String encryptedMessage, String key){
    int stringLength = encryptedMessage.length(); // finding length
    char[][] arrayTabula = arrayMatrix(); 
    char [] tempArray1 = new char[stringLength]; // new temporary character array to be used later
    int [] tempArray2 = new int[encryptedMessage.length()]; // new temporary array to be used later




    int j=0;
    for (int i = 0; i < stringLength; i  ) {
        char [] tempArray;
        int keysIndex = key.charAt(i) - 97;
        tempArray = arrayTabula[keysIndex]; // find's the 'row' that the key is based on. Which is the 'Y -Axis' Then copies this row into a temp array. 'isolating the row'
        for (int x=0;x<26; x  ){
            if (encryptedMessage.charAt(i) == tempArray[x]){ // matches the text in the encrypted message to the letter in the row of the temp array.
                tempArray2[j] = x;
                j  ;
            }
        }

    }

    for (int i=0;i<stringLength;i  ) { 
        tempArray1[i] = alphabet[tempArray2[I]]; // alphabet is just a char array that is the alphabet "abcd..z"

    }

    for(int i=0; i<stringLength; i  ) { // prints char by char one by one
        System.out.print(tempArray1[i]);
    }



}
 

настроены, которые я не могу обработать; Пробелы, символы, заглавные буквы или цифры. В основном все, кроме строчных букв.

По сути, я пытаюсь создать метод для чтения файла с его содержимым.

Сохраните индексы: символы, цифры, пробелы. Затем удалите указанные символы, цифры и пробелы, чтобы текстовый файл можно было зашифровать или расшифровать.

Как только я получу выходные данные от шифровальщика или дешифровальщика, я хочу поместить эти символы, цифры или пробелы обратно в соответствующие места.

Контекст: (Только заглавные буквы не нужно помещать обратно в соответствующие места) (также обратите внимание, я на самом деле не пытаюсь «зашифровать» что-либо, кроме строчных букв)

Например, допустим, содержимое файла, который мы хотим зашифровать, — «Привет, мир!»

Я бы использовал нижний регистр «H». Удалите запятую «,» и удалите пробел » «. Я бы использовал нижний регистр W и удалил «!».

Затем программа запросит у пользователя ключ шифрования. Допустим, длина сообщения составляет 5 символов, а ключ шифрования — «привет», «привет» будет повторяться, чтобы соответствовать 5 символам;

«hihih» <- Будет отправлено моему шифровальщику или дешифровальщику для последующего использования.

В настоящее время моя программа будет выводить текст как «omstvevzsl» < — это зашифрованный текст «Привет, мир!» с ключом «привет». Вот как моя программа в настоящее время обрабатывает его.

(также обратите внимание, что ключ также состоит только из строчных букв)

То, что я пытаюсь сделать, это посмотреть на вывод текста, который является «omstvevzsl». Я хочу вернуть пропущенный пробел, пропущенный восклицательный знак и запятую. Таким образом, выходной файл на самом деле будет «omstv, evzsl!»

(также обратите внимание, что программа считывает входные данные из «входного файла» и выводит зашифрованный / расшифрованный текстовый текст в «выходной файл»)

Вот шифр Виженера, чтобы вы, ребята, могли убедиться в этом сами.

Я знаю, что в настоящее время это основной обходной путь. Если у кого-нибудь есть идеи получше, пожалуйста, дайте мне знать! Но пока это моя лучшая идея. Если кто-нибудь знает лучший способ настройки моего шифратора и дешифратора, это также было бы оценено, но, как я уже сказал, это лучшая идея, которая у меня есть до сих пор для обработки этих текстов.

Комментарии:

1. Возможно, ваши функции шифрования и дешифрования могут просто не изменять символы, которые не являются буквами, а просто передавать их в выходную строку?