У меня есть задание в колледже, где мне нужно зашифровать / расшифровать текстовый файл / URL-адрес, и я сейчас застрял на части дешифрования. Кажется, что шифрование работает нормально для ввода небольшого текста, но не работает с большими объемами текста! ? Кроме того, я запутался в том, как заставить работать мой метод дешифрования. (Я думал, что это очень похоже на метод шифрования). Я новичок с java и изучаю его всего несколько месяцев. Если кто-нибудь может дать мне совет или указать в правильном направлении, я очень признателен. Спасибо :)
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class RailFenceCypher {
private char[][] matrix = null;
public int offset;
public Scanner scanner;
private int key = 0;
private String plainText;
public RailFenceCypher(int key, int offset) {
this.key = key;
this.offset = offset;
}
public void encryptFile(String filePath) throws FileNotFoundException {
String inputText = "";
if (filePath.endsWith(".txt")) {
File textFile = new File(filePath);
Scanner in = new Scanner(textFile);
while (in.hasNextLine()) {
String encr = encrypt(in.nextLine());
// store in output file
}
in.close();
} else {
inputText = filePath;
String encr = encrypt(inputText);
// store in output file
}
}
public String encrypt(String plainText) {
matrix = new char[key][plainText.length()];
String encryptedText = "";
int totalRows = key;
int totalColumns = plainText.length();
int row = 0 + offset;
// boolean value to tell us to move down or up in a fence
boolean shift = false; // up
if (offset > 0) {
shift = !shift;
}
// Moving to each column and then moving to particular row cell to place the
// character
for (int column = 0; column < totalColumns; column++) {
// Find out if it going up or down
if (row == 0 || row == key - 1) {
shift = !shift;
}
matrix[row][column] = plainText.charAt(column);
// Time for the shift and adjust the row
// Going down the fence, so increasing the row
if (shift == true) {
row++;
} else {
// Going up the row, so decrease the row
row--;
}
} // end of for loop for encrypt...
for (int i = 0; i < totalRows; i++) {
for (int j = 0; j < totalColumns; j++) {
if (matrix[i][j] != 0) {
encryptedText += matrix[i][j];
}
}
}
return encryptedText;
}
public String decrypt(String cipherText) {
String decryptedText = "";
int totalRows = key;
int totalColumns = cipherText.length();
int row = 0;
// boolean value to tell us to move down or up in a fence
boolean shift = false;
// Moving to each column and then moving to particular row cell to place the
// character
for (int column = 0; column < totalColumns; column++) {
// Find out if it going up or down
if (row == 0 || row == key - 1) {
shift = !shift;
}
matrix[row][column] = cipherText.charAt(column);
// Time for the shift and adjust the row
// Going down the fence, so increasing the row
if (shift == false) {
row--;
} else {
// Going up the row, so decrease the row
row++;
}
} // end of for loop for encrypt...
for (int i = 0; i < totalRows; i++) {
for (int j = 0; j < totalColumns; j++) {
if (matrix[i][j] != 0) {
decryptedText = "";
}
}
}
return decryptedText;
}
private Scanner s;
private boolean keepRunning = true;
public RailFenceCypher() {
s = new Scanner(System.in);
}
public static void main(String[] args) throws FileNotFoundException {
System.out.println("Please Enter a File or URL:");
Scanner scanner = new Scanner(System.in);
String input1 = scanner.nextLine();
System.out.println("Please Enter a Key:");
String input2 = scanner.nextLine();
System.out.println("Please Enter offset(Range is between 0 and key): ");
String input3 = scanner.nextLine();
boolean isEnc = false;
System.out.println("Please Choose: 1)Encryption or 2)Decryption");
String input4 = scanner.nextLine();
if (input4.equalsIgnoreCase("1")) {
isEnc = true;
} else {
isEnc = false;
}
// scanner to get the input
RailFenceCypher rf = new RailFenceCypher(Integer.valueOf(input2), Integer.valueOf(input3));
if (isEnc) {
String encp = rf.encrypt(input1);
System.out.println("Encrypted Text: " + encp);
} else {
String decr = rf.decrypt(input1);
System.out.println("Decrypted Text: " + decr);
}
}
}