我需要帮助实现Vigenere密码。我的输入字符串“ Cat&Dog”的键为“ abc”,应返回“ Cbv&Eqg”,但是我得到的“ cat&eqg”的代码如下所示。
public class Main {
public static void main(String[] args) {
String a = "Cat&dog";
String b = "abc";
String c = encrypt(a , b);
System.out.println(c);
}
public static String encrypt (String text, String key){
String result = "";
for (int i = 0, j = 0; i < text.length(); i++){
char cur = text.charAt(i);
if (cur > 'a' && cur < 'z'){
result += (char)((cur + key.charAt(j) - 2 * 'a') % 26 +'a');
j = ++j % key.length();
}
else if (cur <= 'A' && cur >= 'Z'){
result += (char)((cur - key.charAt(j) -2 * 'a') % 26 +'A');
j = ++j % key.length();
}
else {
result += text.charAt(i);
}
}
return result;
}
}
答案 0 :(得分:1)
您的情况else if(cur <= 'A' && cur >= 'Z')
将永远不成立。
x <= 65 && x >= 90
中没有x。
然后您需要减去一个'A'并在大写字母的情况下添加密钥。
所以这里是解决方案:
public static String encrypt (String text, String key){
String result = "";
for (int i = 0, j = 0; i < text.length(); i++){
char cur = text.charAt(i);
if (cur >= 'a' && cur <= 'z'){
result += (char) ((cur + key.charAt(j) - 2 * 'a') % 26 + 'a');
}
else if (cur >= 'A' && cur <= 'Z'){
result += (char) ((cur - 'A' + key.charAt(j) - 'a') % 26 + 'A');
}
else {
result += text.charAt(i);
}
j = ++j % key.length();
}
return result;
}
“猫和狗”机智密钥=“ abc”的输出:
Cbv&Eqg