Расшифровка шифра RailFence - PullRequest
0 голосов
/ 10 июля 2020

У меня есть задание в колледже, где мне нужно зашифровать / расшифровать текстовый файл / 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);

        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...