Java 维吉尼亚密码

Java Vigenere Cipher

我正在尝试破译Vigenere_Cipher 当我输入 BEXR TKGKTRQFARI 时,输出是 JAVAPROGRAMMING 但我想要 把 space 像 JAVA PROGRAMMING.

我的代码

public static String VigenereDecipher(String text) {
    String keyword = "SECRET";
    String decipheredText = "";
    text = text.toUpperCase();
    for (int i = 0, j = 0; i < text.length(); i++) {
        char c = text.charAt(i);
        if (c < 'A' || c > 'Z') continue;
        decipheredText += (char)((c - keyword.charAt(j) + 26) % 26 + 'A');
        j = ++j % keyword.length();
    }  
    return decipheredText;
}

您明确忽略了空格。您只需添加这一行:

if (c == ' ') {
   decipheredText += ' ';
}

确保把它放在这一行之前:

if (c < 'A' || c > 'Z') continue;

您忽略了 space。在检查字符范围 'A' 到 'Z' 时检查 space 并将其添加到 decipheredText 作为 space 只是因为你不希望 space 被处理作为另一个角色。