需要解释凯撒密码中的代码
Need explanation for code in 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'){
如果是,它将计算:(ch
的ascii) - (z
的ascii) + (a
的ascii) - 1.
ch = (char)(ch - 'z' + 'a' - 1);
翻译成ch = (char)(ch - 122 + 97 - 1);
假设您要使用密钥 3
加密字符 a
。该程序将取 97(a
的 ascii)+ 3。您将得到 100,这是 d
的 ascii。但是,如果您想使用密钥 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 中的凯撒密码对其进行加密。
直到我遇到添加数字密码会将字母 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
if(ch > 'z'){
如果是,它将计算:(ch
的ascii) - (z
的ascii) + (a
的ascii) - 1.
ch = (char)(ch - 'z' + 'a' - 1);
翻译成ch = (char)(ch - 122 + 97 - 1);
假设您要使用密钥 3
加密字符 a
。该程序将取 97(a
的 ascii)+ 3。您将得到 100,这是 d
的 ascii。但是,如果您想使用密钥 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
.