当我尝试解码加密的消息时,我遇到了问题。它可以解密几乎所有的东西,但是当我尝试解密'w x y z‘(全部小写)时,它不能正常工作。它只对大写字母进行解密。我做错什么了?
@SuppressWarnings("unused")
public static void main(String[] args) {
String message = "ABCDEFGHILMNOPQRSTU hello giordano WORLD HOW wxyZ XyZ XYZ YOU xyz";
System.out.println(message);
String encr = encrypt(message);
String decr = decrypt(encr);
System.out.println(encr + "\n" + decr);
}
@SuppressWarnings("unused")
private static String encrypt(String message) {
StringBuilder temp = new StringBuilder();
for(int i=0; i<message.length(); i++) {
char c = (char)(message.charAt(i) + 3);
if(c >= 'x') {
c = (char)(message.charAt(i) - 23);
} else {
c = (char)(message.charAt(i) + 3);
}
temp.append(c);
}
return temp.toString();
}
private static String decrypt(String message) {
StringBuilder temp = new StringBuilder();
for(int i=0; i<message.length(); i++) {
char c = (char)(message.charAt(i) - 3);
// HELLO WORLD
// KHOOR ZRUOG
if(c > 'x') {
c = (char)(message.charAt(i) + 26);
} else {
c = (char)(message.charAt(i) - 3);
}
temp.append(c);
}
return temp.toString();
}输出:
Text: ABCDEFGHILMNOPQRSTU hello giordano WORLD HOW wxyZ XyZ XYZ YOU xyz
Encrypted: DEFGHIJKLOPQRSTUVWX#khoor#jlrugdqr#ZRUOG#KRZ#`ab]#[b]#[\]#\RX##abc
Decrypted: ABCDEFGHILMNOPQRSTU hello giordano WORLD HOW ]^_Z X_Z XYZ YOU ^_`预期输出:
Text: ABCDEFGHILMNOPQRSTU hello giordano WORLD HOW wxyZ XyZ XYZ YOU xyz
Encrypted: DEFGHIJKLOPQRSTUVWX#khoor#jlrugdqr#ZRUOG#KRZ#`ab]#[b]#[\]#\RX##abc
Decrypted: ABCDEFGHILMNOPQRSTU hello giordano WORLD HOW wxyZ XyZ XYZ YOU xyz发布于 2019-11-27 01:58:01
您仅在较小情况下才会遇到问题,因为您是用加密方式编写此代码的
if(c >= 'x') {
c = (char)(message.charAt(i) - 23);
} else {
c = (char)(message.charAt(i) + 3);
}这个是用来解密的
if(c > 'x') {
c = (char)(message.charAt(i) + 26);
} else {
c = (char)(message.charAt(i) - 3);
}他们只处理小的'x‘,而对于大写的'X’,你没有写任何这样的条件。所以,如果你从你的函数中删除了上面提到的代码,它将开始工作。但这不是caesar-cipher,因此你可以从“如何循环遍历”开始寻找。
发布于 2021-01-23 02:24:01
经过搜索和测试,发现这才是正确的解码方式。
private static String decrypt(String message) {
StringBuilder temp = new StringBuilder();
//key = 4
for(int i=0; i<message.length(); i++) {
char c = (char)((message.charAt(i) - 4 - 97) %26 +97);
if(c < 'a') {
c = (char) (message.charAt(i) - 4 - 'a' + 'z' + 1);
}
temp.append(c);
}
return temp.toString();
}https://stackoverflow.com/questions/59056596
复制相似问题