我看了一下在http://rosettacode.org/wiki/Vigen%C3%A8re_cipher#Java提供的Vigene密码源代码。我试着测试了一下程序,但是输出的结果和我根据vigene期望的不一样。例如,当“dog”为单词,“bob”为密钥时,我期望它被加密为“ech”,但实际上却是“qot”。请帮我看看这个问题。
然而输出结果有所不同。这是因为我对密码的理解有误,还是因为采用了与众所周知的维吉尼亚密码不同的方法?
public static void main(String[] args) {
String key = "bob";
String ori = "dog";
String enc = encrypt(ori, key);
System.out.println(enc);
}
static String encrypt(String text, final String key) {
String res = "";
text = text.toLowerCase();
for (int i = 0, j = 0; i < text.length(); i++) {
char c = text.charAt(i);
if (c < 'a' || c > 'z') continue;
res += (char)((c + key.charAt(j) - 2 * 'A') % 26 + 'A');
j = ++j % key.length();
}
return res;
}
然而输出结果有所不同。这是因为我对密码的理解有误,还是因为采用了与众所周知的维吉尼亚密码不同的方法?