Как изменить зашифрованное сообщение обратно на расшифрованное сообщение?

#java #string #encryption #caesar-cipher

#java #строка #шифрование #caesar-cipher

Вопрос:

Это код, который я использовал для шифрования сообщения, введенного пользователем в текстовом поле. Мне интересно, как создать подобный код, но вместо этого возьмите зашифрованное сообщение, вставьте его в новое текстовое поле и превратите его в расшифрованное сообщение.

 private void btnDecryptActionPerformed(java.awt.event.ActionEvent evt) {
    String origMessage;
    String encMessage = "";
    char tempChar;
    int tempAscii;

    origMessage = txtDecrypt.getText();

    for (int i = 0; i < origMessage.length(); i = i   1) {
        tempChar = origMessage.charAt(i);
        tempAscii = (int) tempChar;
        tempAscii = tempAscii   3;
        tempChar = (char) tempAscii;
        encMessage = encMessage   tempChar;
    }

    if (origMessage.length() < 30) {
        fTxtEncrypt.setText(encMessage);
    } else {
        fTxtEncrypt.setText("Must be less than 30 characters...");
    }
}
 

Ответ №1:

Шифр Caesar сдвигает каждый символ на определенное количество символов. Чтобы расшифровать это сообщение, вы должны переместить их обратно на то же количество символов:

 public static void main(String[] args) {
    String encrypted = caesarCipher("message", 3);
    String decrypted = caesarCipher(encrypted, -3);

    System.out.println(encrypted); // phvvdjh
    System.out.println(decrypted); // message
}
 
 public static String caesarCipher(String source, int shift) {
    StringBuilder target = new StringBuilder(source.length());
    for (int i = 0; i < source.length(); i  ) {
        target.append((char) (source.charAt(i)   shift));
    }
    return target.toString();
}
 

Ответ №2:

Для расшифровки вам нужно сделать tempAscii - 3

Пример :

 public class Test {
    public static void main(String args[]) throws Exception {
        String origMessage = "Hello world";
        String encMessage = encrypt(origMessage);
        System.out.println("encrypt message :"   encMessage);
        System.out.println("decrypt message :"   decrypt(encMessage));
    }

    static String decrypt(String encMessage) throws Exception {
        return encryptOrDecrypt(encMessage, "decrypt");
    }

    static String encrypt(String encMessage) throws Exception {
        return encryptOrDecrypt(encMessage, "encrypt");
    }

    private static String encryptOrDecrypt(String message, String type)
            throws Exception {
        char tempChar;
        int tempAscii;
        String resultMessage = "";
        for (int i = 0; i < message.length(); i = i   1) {
            tempChar = message.charAt(i);

            tempAscii = (int) tempChar;

            if (type.equals("encrypt")) {
                tempAscii = tempAscii   3;
            } else {
                tempAscii = tempAscii - 3;
            }
            tempChar = (char) tempAscii;

            resultMessage = resultMessage   tempChar;
        }
        if (message.length() < 30) {
            return resultMessage;
        } else {
            throw new Exception("Must be less than 30 characters...");
        }
    }
}
 

Вывод:

 encrypt message :Khoor#zruog
decrypt message :Hello world