Попытка сделать Vigenere Encrypter в Java
EDIT2: думаю, вопрос идет здесь. Итак, мой первый вопрос: правильно ли я сканирую файл (вероятно, нет)?
Поэтому я пытаюсь построить кодировщик в Java, используя шифр Vigenere. Предполагается, что ключевые и простые текстовые файлы передаются в командной строке при выполнении программы (например, ">java vigenere k1.txt pt1.txt"). Затем предполагается сканировать файл на наличие текста (что является одной из частей, я не думаю, что я сделал правильно), где он удалит все не алфавитные буквы и преобразует весь текст в нижний текст для каждой (ключ и обычный текст), и добавьте обычный текст с 'x', если он повторяется, чем текст ключа при повторении. Оттуда предполагается зашифровать обычный текст, сдвигая символы на ключевые символы% 26.
import java.util.Scanner;
public class vigenere {
//string length constant
public static final int MAX_LENGTH = 512;
public static void main(String[] args) {
//obtaining file names
String keyFile = args[0];
String plainTextFile = args [1];
//scanning files
Scanner keyContents = new Scanner(keyFile);
keyContents.useDelimiter("//Z");
Scanner plainTextContents = new Scanner(plainTextFile);
plainTextContents.useDelimiter("//Z");
//turn scanners into strings
String key = keyContents.next();
String plainText = plainTextContents.next();
//conver string to stringbuilder
StringBuilder key1 = new StringBuilder(key);
StringBuilder plainText1 = new StringBuilder(plainText);
//set length of strings
key1.setLength(MAX_LENGTH);
plainText1.setLength(MAX_LENGTH);
//set stringbuilder back to string
key = key1.toString();
plainText = plainText1.toString();
System.out.println("Original Key:");
System.out.println(key);
System.out.println("****************************");
System.out.println("Original PlainText:");
System.out.println(plainText);
System.out.println("****************************");
encrypt(plainText, key);
}
static void encrypt(String plainText, String key) {
//new strings
String newKey = "";
String newPlainText = "";
//convert to all lowercase
key = key.toLowerCase();
plainText = plainText.toLowerCase();
for(int i=0; i<key.length(); i++) {
char currentKey = key.charAt(i);
if(currentKey < 'a' || currentKey > 'z')
continue;
newKey += (char)(currentKey);
}
System.out.println(newKey);
for(int i=0, j=0; i<plainText.length(); i++) {
char currentPlainText = plainText.charAt(i);
if(currentPlainText < 'a' || currentPlainText > 'z')
continue;
newPlainText += (char)((currentPlainText + newKey.charAt(j) % 26) + 'A');
}
System.out.println(newPlainText);
}
}
Выходы в настоящее время:
Original Key:
k1.txt
****************************
Original PlainText:
p1a.txt
****************************
ktxt
´¥¸¼¸