#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