下面的代碼是爲了加密和解密消息輸入當。當我對數據進行加密和解密時,它有時會起作用,而在其他時候則不起作用。以下是我遇到的問題的一個例子。在輸出結束看似隨機字符使用掃描儀
加密
解密
正如你所看到的,當我嘗試解密,我的程序終止,一些亂碼輸出到控制檯。我的代碼有什麼問題?
我不能確定提這會有所幫助,但我有Eclipse的文件的編碼設置爲UTF-8。
請原諒任何代碼很差。我仍然是Java的初學者,我爲此感到困惑。
import java.util.Scanner;
public class Transcrypt {
static String mode = "",
msg,
key;
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
while (!mode.equals("e") && !mode.equals("d")) { // Ask for mode until equal to "e" or "d"
System.out.print("Encrypt or decrypt? (e/d) ");
mode = input.nextLine().toLowerCase();
}
System.out.print("Message: "); // Ask for message
msg = input.nextLine();
System.out.print("Passkey: "); // Ask for key
key = input.nextLine();
input.close();
System.out.println(transcrypt(msg, key, mode.equals("d"))); // Transcrypt and output
}
public static String transcrypt(String msg, String key, boolean decode) {
String result = "";
for (int i=0; i<msg.length(); i++) {
// Add or subtract Unicode index of key.charAt(i % key.length()) and/from msg.msg.charAt(i) and convert back to character
result += (char) ((int) msg.charAt(i) + ((int) key.charAt(i % key.length())) * (decode ? -1 : 1));
}
return result;
}
}
似乎是某種形式的終端問題。在終端中使用二進制字符不一定是個好主意。您可以將您的二進制字符串編碼/解碼爲base64或hex,但要解決控制檯問題。 –
或者,傳統的(16世紀)Vigenere只加密字母並在字母表中環繞:X + A = Y,X + B = Z,X + C = A,X + D = B。經常需要處理一些空格和非空格,比如在模糊的時候在單詞之間使用X,並用單詞STOP QUERY ONE TWO TH等替代。另外注意,如果用於任何重要長度的真文本,Vigenere很容易被破壞;請參閱維基百科。 –