monty>./vigenere freqs.txt stage4.txt Keyword length 1: 0.0437 Keyword length 2: 0.0444 Keyword length 3: 0.0432 Keyword length 4: 0.0442 Keyword length 5: 0.0786 Keyword length 6: 0.0438 Keyword length 7: 0.0440 Keyword length 8: 0.0430 Keyword length 9: 0.0412 Keyword length 10: 0.0788 Give keyword length (optimal m=10): 5 1)AKCJI: KGMNWFLHGMJKSEMKWJDWKZGEEWKVWIMAHSYWHJWF 2)BLDKJ: JFLMVEKGFLIJRDLJVICVJYFDDVJUVHLZGRXVGIVE 3)CMELK: IEKLUDJFEKHIQCKIUHBUIXECCUITUGKYFQWUFHUD 4)DNFML: HDJKTCIEDJGHPBJHTGATHWDBBTHSTFJXEPVTEGTC 5)EOGNM: GCIJSBHDCIFGOAIGSFZSGVCAASGRSEIWDOUSDFSB 6)FPHON: FBHIRAGCBHEFNZHFREYRFUBZZRFQRDHVCNTRCERA 7)GQIPO: EAGHQZFBAGDEMYGEQDXQETAYYQEPQCGUBMSQBDQZ 8)HRJQP: DZFGPYEAZFCDLXFDPCWPDSZXXPDOPBFTALRPACPY 9)ISKRQ: CYEFOXDZYEBCKWECOBVOCRYWWOCNOAESZKQOZBOX 10)JTLSR: BXDENWCYXDABJVDBNAUNBQXVVNBMNZDRYJPNYANW 11)KUMTS: AWCDMVBXWCZAIUCAMZTMAPWUUMALMYCQXIOMXZMV 12)LVNUT: ZVBCLUAWVBYZHTBZLYSLZOVTTLZKLXBPWHNLWYLU 13)MWOVU: YUABKTZVUAXYGSAYKXRKYNUSSKYJKWAOVGMKVXKT 14)NXPWV: XTZAJSYUTZWXFRZXJWQJXMTRRJXIJVZNUFLJUWJS 15)OYQXW: WSYZIRXTSYVWEQYWIVPIWLSQQIWHIUYMTEKITVIR 16)PZRYX: VRXYHQWSRXUVDPXVHUOHVKRPPHVGHTXLSDJHSUHQ 17)QASZY: UQWXGPVRQWTUCOWUGTNGUJQOOGUFGSWKRCIGRTGP 18)RBTAZ: TPVWFOUQPVSTBNVTFSMFTIPNNFTEFRVJQBHFQSFO 19)SCUBA: SOUVENTPOURSAMUSERLESHOMMESDEQUIPAGEPREN 20)TDVCB: RNTUDMSONTQRZLTRDQKDRGNLLDRCDPTHOZFDOQDM 21)UEWDC: QMSTCLRNMSPQYKSQCPJCQFMKKCQBCOSGNYECNPCL 22)VFXED: PLRSBKQMLROPXJRPBOIBPELJJBPABNRFMXDBMOBK 23)WGYFE: OKQRAJPLKQNOWIQOANHAODKIIAOZAMQELWCALNAJ 24)XHZGF: NJPQZIOKJPMNVHPNZMGZNCJHHZNYZLPDKVBZKMZI 25)YIAHG: MIOPYHNJIOLMUGOMYLFYMBIGGYMXYKOCJUAYJLYH 26)ZJBIH: LHNOXGMIHNKLTFNLXKEXLAHFFXLWXJNBITZXIKXG Give selected keyword index: 19 SOUVENTPOURSAMUSERLESHOMMESDEQUIPAGEPRENNENTDESALB ATROSVASTESOISEAUXDESMERSQUISUIVENTINDOLENTSCOMPAG NONSDEVOYAGELENAVIREGLISSANTSURLESGOUFFRESAMERSAPE INELESONTILSDEPOSESSURLESPLANCHESQUECESROISDELAZUR MALADROITSETHONTEUXLAISSENTPITEUSEMENTLEURSGRANDES AILESBLANCHESCOMMEDESAVIRONSTRAINERACOTEDEUXCEVOYA GEURAILECOMMEILESTGAUCHEETVEULELUINAGUERESIBEAUQUI LESTCOMIQUEETLAIDLUNAGACESONBECAVECUNBRULEGUEULELA UTREMIMEENBOITANTLINFIRMEQUIVOLAITLEPOETEESTSEMBLA BLEAUPRINCEDESNUEESQUIHANTELATEMPETEETSERITDELARCH ERBAUDELAIREEXILESURLESOLAUMILIEUDESHUEESLEMOTPOUR ETAGEQUATREESTTRAJANSESAILESDEGEANTLEMPECHENTDEMAR CHERThe program is interactive. It first evaluates different keyword lengths. For each length it gives a score whose meaning is described below. The higher the score, the more likely it is that the keyword length is the true keyword length. As we can see, length five is the first candidate with a significantly higher value, so that length is selected.
The program then computes the most probable distances between the letters in the keyword and displays the 26 possible keywords with this letter distances. 25 of the candidates are nonsense, but number 19 both gives a meaningful keyword and an easily recognizable plaintext in French. The plaintext is taken from the poem ``L'Albatros'' by Charles Baudelaire, and as we can see the codeword for this stage is TRAJAN.