And other functions who might be useful are:
ResourceFunction["VigenereDecipher"] ResourceFunction["VigenereCipher"]
(and yes, years after the fact as well)
Sander, does all this necromancy make us, umm, "visionaires"?
I guess so :-) !
Your position differences for the four times repeated trigram "XJE" are all divisible by 14. All but one difference for the thrice-repeated trigrams is divisible by 14. I think I would assume that one was an accidental repeat (due to actually different plain text trigrams getting the same encoding). So expect a key length of 7 or 14 because 2 is too short. Also there is no reason to ignore the doubly-repeated cases, and they might give similar information (I have not checked).