我正在尝试让我的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