Я просматривал исходный код Vigene Ciphere, представленный на http://rosettacode.org/wiki/Vigen%C3%A8re_cipher#Java. Я попытался протестировать программу самостоятельно, и она не выдавала значений, которые я ожидаю на основе Вигена. Например, «собака» — это слово, а «боб» — это ключ. Я ожидаю, что это будет зашифровано как «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;
}
Однако выход разный. Это потому, что мое понимание шифра неверно, или это использует другой подход к хорошо известному шифру Виженера.