public String encode(String plain) { int period = key.length(); String key_u = key.toUpperCase(); String plain_u = plain.toUpperCase(); StringBuilder sb = new StringBuilder(); int kp = 0; for (int i = 0; i < plain_u.length(); i += period) { int end = i + period > plain_u.length() ? plain_u.length() : i + period; char kp_c = (char) (kp + 'A'); kp += progression_index; kp = kp % 26; for (int j = i; j < end; j++) { char k1 = key_u.charAt(j - i); char pt = plain_u.charAt(j); char c1 = Vigenere.get_vigenere_char(k1, pt); char c2 = Vigenere.get_vigenere_char(kp_c, c1); sb.append(c2); } } return sb.toString(); }