凯撒加密完全错过了空间

时间:2014-10-24 09:42:45

标签: java math encryption

我正在尝试使用多个密码在java中编写基本加密器/解密器,但我遇到了ceasar密码的问题。

它可以处理没有空格的字符串,但是如果我在字符串中添加一个空格,它会加密所有空间,但不会在空格之后加密。我可能错过了一些非常基本的东西,但是有人看到了这个问题吗?

关于编码风格的任何提示都会很棒,欢呼:D

        if (encdec.equals("E")){
        System.out.println("Please input the shift you would like to use :> ");
        int shift = in.nextInt();
        System.out.println("Please input the message you would like to be encrypted :>");
        String encryptionInitial = in.next();
        int len = encryptionInitial.length();
        String s = "";
        for(int count = 0; count < len; count++){
            char c = (char)(encryptionInitial.charAt(count) + shift);
            if (c > 'z'){
                s += (char)(encryptionInitial.charAt(count) - (26 - shift));
            }
            else if (c == ' '){
                s += (char)(encryptionInitial.charAt(count));
            }
            else{
                s += (char)(encryptionInitial.charAt(count) + shift);
            }

        }
        System.out.println("Encryption complete :> " + s);


    }

1 个答案:

答案 0 :(得分:1)

这是因为您正在正确阅读邮件:致电时

in.next()

您将输入读到下一个空格,然后删除其余空格。

你需要的是in.nextLine(),但有一个转折点:因为你刚刚读过它之前的int,你需要删除第一行,并保留第二行:

in.nextLine(); // drop
String encryptionInitial = in.nextLine();

也许更强大的方法是调用nextLine,直到得到非零长度的输入:

String encryptionInitial;
int len;
do {
     encryptionInitial = in.nextLine();
     len = encryptionInitial.length();
} while (len == 0);

即使用户在实际消息之前输入一个或多个空行,这也会起作用。