Vigenere Cipher - Java无法显示大写字母

时间:2017-05-24 08:31:05

标签: java vigenere

我正在尝试让我的Vigenere Cipher工作,它目前打印所有可打印的字符,但是当它打印大写字母时,它将无法显示正确的输出。

public class VigenereCipher {

public static void main(String[] args) {

    String key = "thisIsTheKey";
    Scanner uMessage = new Scanner(System.in);
    String u = uMessage.next();
    u += uMessage.nextLine();
    String ori = u;
    String enc = encrypt(ori, key);
    System.out.println(enc);
    System.out.println(decrypt(enc, key));
}

static String encrypt(String text, String key) {
    String res = "";

    for (int i = 0; i < text.length(); i++) {
        char c = text.charAt(i);

        int caesar = key.charAt(i % key.length());

        int sum = c + caesar;


       if(caesar == 126){

            res += (char) (32);
        }else{
            int temp = ((sum % 126));
            if(temp < 32)
                temp += 94;
            res += (char) (temp) ;
       }

        //  j = ++j % key.length();
    }
    return res;
}




static String decrypt(String text, String key) {
    String res = "";
    // text = text.toUpperCase();
    for (int i = 0; i < text.length(); i++) {
        char c = text.charAt(i);

        int caesar = key.charAt(i % key.length());

           int sum = c + (126 - caesar);
        if((sum % 126) < 32)
            sum += 32;
        res += (char) (sum % 126);
    }
    return res;
}
 }

程序将打印大多数正确认为它只是在有大写字母时它会显示错误。

例如,如果用户在哪里放入AAAAAAAAAAAAAAAAAA的密钥为&#34; thisIsTheKey&#34;结果就是这意味着如果密钥中有一个资本,它将改变结果:

thisIsTheKeythisIs
AAAAAAAAAAAAAAAAAA
7+,6j6u+(l(<7+,6j6
AAAA!A!AA!AAAAAA!A

0 个答案:

没有答案