java - 需要凯撒密码中的代码解释

标签 java caesar-cipher

嘿,最近我的任务是创建一个应用程序,该应用程序读取消息并使用 Java 中的凯撒密码对其进行加密。

直到我遇到添加数字密码会将字母 a-z/A-Z 转换为特殊符号的部分时,我才真正遇到问题,我真的不知道该怎么做。

这是我的解决方案的代码:

private String caesarCipher(String message) {
    Scanner input = new Scanner(System.in);
    StringBuilder cipher = new StringBuilder();
    char ch;
    int key;

    System.out.print("Enter a key: ");
    key = Integer.parseInt(input.nextLine());

    for(int i = 0; i < message.length(); i++) {
        ch = message.charAt(i);
        if(ch >= 'a' && ch <= 'z'){
            ch = (char)(ch + key);

            if(ch > 'z'){
                ch = (char)(ch - 'z' + 'a' - 1);
            }

            cipher.append(ch);
        }
        else if(ch >= 'A' && ch <= 'Z'){
            ch = (char)(ch + key);

            if(ch > 'Z'){
                ch = (char)(ch - 'Z' + 'A' - 1);
            }

            cipher.append(ch);
        }
        else {
            cipher.append(ch);
        }
    }

    return cipher.toString();
}

有人可以向我解释以下陈述背后的过程和推理吗:

if(ch > 'z'){
    ch = (char)(ch - 'z' + 'a' - 1);
}

最佳答案

它永远不会允许加密字符超出其假定的范围,即 a - z。 a 和 z 的 ascii 分别为 97 和 122,您只希望凯撒密码加密在此字符范围内。

这将检查ch的ascii代码是否大于z的ascii代码

if(ch > 'z'){

如果是,它将计算:(ascii of ch) - (ascii of z) + (ascii of a) - 1 .

ch = (char)(ch - 'z' + 'a' - 1);

它被翻译成ch = (char)(ch - 122 + 97 - 1);

假设您想使用 key 3 加密字符 a。该程序将采用 97(a 的 ascii)+ 3。您将得到 100,即 d 的 ascii。然而,如果您想使用 key 3 加密 z 该怎么办?

与之前一样,需要 122(z 的 ascii)+ 3 = 125。但是,在 97 - 122 (a-z) 范围内找不到 125。因此,您将得到一个不需要的字符(在本例中,125 是 } 的 ascii)。

因此,(ch - 'z' + 'a' - 1) 将确保任何超过 ascii 122 的字符都将被转换回 ascii 范围仅包含 97 和 122 的字符。在 125 的示例中,ch = (char)(125 - 122 + 97 - 1) => ch = (char)(99) => ch = c.

关于java - 需要凯撒密码中的代码解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58354208/

相关文章:

java - 使用 spring 部署到 Tomcat 的简单应用程序

java - Spark Java 编辑列中的数据

c++ - 无法找出 C++ 中 Caesar Cipher 的问题

C中的凯撒密码,大写和小写

python - 与凯撒密码的 ASCII 循环作斗争

java - 如何获得 Child 类?

java - 使用 async-profiler 和 perf 测量 DirectByteBuffer

java - 属性文件的访问和编码

c - 仅某些回文被写入文件

python - 我怎样才能让这个Python代码更高效