public static <A> VigenereKey<A> invertKey( VigenereKey<A> key, Alphabet<? extends A> basicAlphabet) { List<Integer> numberKey = key.getKeyAsNumberList(); int[] invKey = new int[numberKey.size()]; int alphaSize = basicAlphabet.getContent().size(); int counter = 0; for (Integer keyElement : numberKey) { invKey[counter] = (alphaSize - keyElement) % alphaSize; counter++; } return new VigenereKey<A>(invKey, basicAlphabet); }
@Override public List<A> encrypt(List<? extends A> plainText, VigenereKey<A> key) throws ElementNotInAlphabetException { List<A> chiffre = new LinkedList<A>(); List<Integer> intKey = key.getKeyAsNumberList(); int counter = 0; for (A plainTextElement : plainText) { if (!getPlainTextAlphabet().getContent().contains(plainTextElement)) { throw new ElementNotInAlphabetException(); } chiffre.add( rotateElementAgainstAlphabet( plainTextElement, intKey.get(counter % intKey.size()), this.getPlainTextAlphabet())); counter++; } return chiffre; }