Cracking the Cipher¶
The next step is to find the best Caesar key for each Caesar group: the one whose decrypted letter frequencies most closely match those of general English. Combining these keys in order gives an estimate of the full Vigenère key.
Comparing Frequencies¶
Let \(\mathbf{f} \in \mathbb{R}^{26}\) be the vector of general English letter frequencies from the earlier table, and let \(\mathbf{s} \in \mathbb{R}^{26}\) be the vector of letter frequencies of a Caesar group after decrypting it with a particular Caesar key. In both vectors, assume the frequencies are listed in alphabetical order, from \(\text{A}\) to \(\text{Z}\). Because decrypting a Caesar group with a different key only relabels its letters, \(\mathbf{s}\) always contains the same values, just in different positions for different keys. Therefore, the norm \(\|\mathbf{s}\|\) is always the same, no matter which Caesar key is used for decryption. This means that among the possible choices for \(\mathbf{s}\), the one that is closest to \(\mathbf{f}\) is the one that minimizes the angle \(\theta\) between the two vectors. Recall that the angle \(\theta\) between \(\mathbf{s}\) and \(\mathbf{f}\) satisfies
Making \(\theta\) small (close to \(0\)) means making \(\cos(\theta)\) large (close to \(1\)), which is achieved by making the numerator \(\mathbf{s}\cdot\mathbf{f}\) as large as possible. This also minimizes the distance from \(\mathbf{s}\) to \(\mathbf{f}\), since
and only the middle term \(- 2(\mathbf{s} \cdot \mathbf{f})\) changes from key to key. Therefore, the key that maximizes \(\mathbf{s} \cdot \mathbf{f}\) is the key whose decryption has letter frequencies closest to English.
Problem 3
Write a function named best_caesar_key() that accepts a ciphertext string representing a single Caesar group.
For each possible key \(\text{A}\)–\(\text{Z}\),
Decrypt the ciphertext with that key via
vigenere_decrypt()from Lab 6 Problem 2.Compute the letter frequencies of the candidate plaintext with
letter_frequency()from Problem 2.Compute the dot product of those letter frequencies with \(\mathbf{f}\), the vector of letter frequencies for general English.
Return the Caesar key (as a single-character string) that produces the largest dot product. If several keys tie, return the first in alphabetical order.
Test Cases
s = "KYVHLZTBSIFNEWFOALDGJFMVIKYVCRQPUFX"
key = best_caesar_key(s)
print(key)
print(vigenere_decrypt(s, key))
R
THEQUICKBROWNFOXJUMPSOVERTHELAZYDOG
s = "IBMUSWUHSIOMYY"
key = best_caesar_key(s)
print(key)
print(vigenere_decrypt(s, key))
U
OHSAYCANYOUSEE
Cracking the Vigenère Cipher¶
Problem 4
Write a function named vigenere_crack() that accepts a string of ciphertext that was encrypted with a Vigenère cipher whose key is unknown.
Estimate the length of the key with
key_length()from Lab 6 Problem 5.Split the ciphertext into its Caesar groups with
caesar_groups()from Problem 1.Find the best Caesar key for each Caesar group with
best_caesar_key()from Problem 3.Join the Caesar keys (in order) to form the Vigenère key.
Decrypt the ciphertext with this key using
vigenere_decrypt()from Lab 6 Problem 2.
Return both the key and the decrypted plaintext.
Note: The key_length() function searches only lengths 1 through 20, and both the length estimate and the frequency analysis can be inaccurate, especially for short messages.
If the estimated length is a multiple of the true key length and each Caesar key is correctly identified, the recovered key is the true key repeated (for example, FUNFUNFUN instead of FUN), which still decrypts the ciphertext correctly.
Test Cases
Decrypt the following ciphertexts.
CZVEILTUPRIMCGKBTVSVXVJRTCIBTSQQJHBVHVPKQRJSEUMHMGFBPXWXDOAMECWQTUCZXGIBBVLXGIHBFSDGESBTXLBESFJIWTFDRGTTWKBGQXWXDCBMLTKUWFVIGPCGEGESBPUOWXXMJOQPSEBEHHTIHHTQBPZTKUOGKSCLKBVVECWYVNVMHMJSHUIDYCPBQOIAQITJXPEKQRYMIAQIGRMRMWFRUSGVQBIGVHTVWBPWHHUVRYEHVQBFKHTKKBTKRWXTCJPQXGFOFYIAECGFJIRHWZQHSGMJSUQXSTAANFIWXTTRGPKXTMFNITIAOAFWINRWQYLTMJSEVLTINSNUYGXQTZCOXGIOQCMHREVNKRLHWZQDILHTHUVLTMTCHDPTHHURVXXGIICCRSIKQXKRVMJSQCMHBGGJJICLWRQGRARCKUKXTKCPOKXLBVVCKRZXASFTECVNCFGFNAGFGJIGXYOFPSIAKBTUSKXTMEGQPKMOONIXGVVNVRDKFWQCPXVGHUKRZBVGBXIGROIPJSJMQTGJILTAHBJIPKVVRTEQUKHFCCIHKHFGPUHJRRCVDAFSNTMHACZYDIATVSJJICLJSGJSJZJHVVSKXTOSVIGPCFQUMIHEQHTVTWVCUGVIACHFJIDNIVGVSWTXSJQRSXTSQCXIAKGOWXPMVVRVMBXKHNNPHXGARFUJBVSACXJKCZOWXLAGBGJIGTDPVVERMWOYNCIHQYNYEIVJCHVSUBVGJCMHMECNVTDVMSGCRSEQCXGHPMKHNPHIAGBUWVGBGRBPEABESFVEGMGRGQLTKHSRVJDKKHSNEHAGRNEVDLUVRTQXGFHUCXHAGVNFRTOGFOGJDKGGRGRPKCPOKXLBVVRKXWXTOJCMHMECNVTDVMSGQVPPCHPJXDMCYRQYIHHWGCRSUWFAKRVPKHUEYGBQGVVCHAGFNPERKQGFVLTYKSYFEUMGFVVECWHCEVYCTVSYAAPLLIFVMCMKARVSHXGWGRSEWQKACPPKISECFQBVVBNIJGFSEVLTAGRTGMCTPCGJIGFQARPXSHYBJGRITNWPGEUMGFVVRTOGFBPGTVQBFKHTKKBTJSLBPHUGADKNRFJILTUHBIIIHWHNIEXGVVRTEQUKHUQPTPGBGUXGTKUUVSCEKYRCXJGPSYHSGLQARYENTPRGJICWKDCGHHNFRRPPNWQKAUSHNFRRPPNMJOGCPXVGVNFRDMCABOICMVCGJMCDCPBWXHMQDCKRVAGFFGPUUGTBTIHAGTBWRSAGFFGPUYCZYKRVWQKACZTKARRGTLXNZRKXWXTHUGATENKNUZTKARRGTDKUVRHIAEXSEAWAHYZLHSGLJSUCHEEGBGASUMKARCWHAGKRPXSHYBGQPDHMOOQYIAGFNPHIHYCAFIGPJOGYEHZQWAIXDACDCGRCXZHSKVHMUVRVVXXFHBNSDDFCJPECWOOXGSJMYVNVWWXYOFESBBPUGQFJMKHJCWIHQRNTOIHUSRCRNMJWAIXWXPGUGPDHMSQCXIAGGVFIHHHHUGATENOAFRDMKQRFXWTVHUGCLXTSSKPAXFKVVLRNRPBCVSLCBQDSDDUVRNZTLJSEGECWVVRTIHAGGNYQPIUOAFTXVVIEGWWNPUHRSCIGUFULTMQCXFSLGCXNTJGHOCAGSUMJSFJIAOGGNUWWXROFUISBVKNUPPUGZYGHDKCBTGQPKOOYCHTUWHGQLTKIFRCXSBUOCRSXGVARPXXMYOFGQEMAGUGHXWPCGNMZXVCQTSEMJSWCVUHTTRCVDYMWYNMCZUCZGFDWAGBOECTISQVSENVWGKRIHQBRQJIAGQHRFDTTRFCWHAGTRNPETUHVVATENHUQYVAVOYKGTMQVRTWTEHOSVIGLWQUCJPENOFVLXLKGUCPAMJWAMRDMJWAISUMWAONMCZFCJPWITKFFJSLUTOIGXWXAZYCPAMJWAMQTTVVBOILAAWJQYAWPHFCCPGAHUKRVTDCHVMIXXSAKJXYGZYQJUMJSGQTDYVVRJSJLGKUKGWPCGIGVNEKYRNCIKWSQQACWQKAFSLGYCHNHIAGTNNPCXXSEESBXVCNPICWKKBPHTKJCJOECROWYGWXOGTNNPTGDMGJMHMKARULTLCWQCPDNFWZWWIUGURVXXGIGBOILAGFRPIPKVVREICMTSBHXWXGOEVLAXVARUITMJOGYSJEFPRHSJKVVBWWPGFAVNIHWQKAKXWBPYSQVNHWGRGEABESUCHAXCFAVWTOGFNNXWBPUFQJIAKGFQVIBPVRTPTLUCAUMCMJSFELDHNFBQQPGFHUQYVAVVVUAPLPCGCZTKAUBQHDIRCEVYCBVMSQVHAQKVPKDYHVRTOCHYZRFKTTUHUGVTPCGAQSCXVCYKWIXPHBJIGLVWYNMIPCGTQSSITOPVMRXVCFCCXMQJRTCTLVVNVWPUQIGVLTKKUUVHXLVOAEIQNVHUGRXPQBQGVLACHYCXXMWRRQVAHPUVVYSXKJRISIMQOYKGTACRAQMSXCKUCXATVWGWHTPCGBTPDGIWGWHTXKHUGVQNVHUQYVAVHUGCLXTSAKGTZTOAFADKFGGQWPRRFRUICMNMFJIQXIOACKPBPWJQRSXTWSKWWTNZSCPAKKUUVXWKQITJXWXGOEVLWHYTHPRNBVZYUITFVCPQQTHWHNOSCZVVRRIDINSGJEIPCZXYMIAVVRKVWXCRFFSLGYOEFXWXCBGKTPMJWRUMIAKBXULTPCGECXWXTUYCHIAGFRYEHGQCAGPXLVSAKRVMJWFVMBXCGVVHXWPHFQYCWCHNNPIAGFVILIPQFQDYIBUVNNPWTXSGQEHDVVROAWTVHUGRPFGCSVLTVQIAVVNBUMBWOCHYDYGEHXOONOMHMJWFPILSGOYCRSHTOHUXGTNWNCRSLJSGTMTWVCPWVILGMNUWWXUDBMIUTPQLEYGMUSLKRVTUMBWVTYCZYKRVMJFBWKWMJSNKVSHACHVLXGMMBWGDNNRZCRPZGWGCRSPJOGCRXZPCECRIEKHGNIVBTZFJIAEVVVPOBXHCECWZBPUAQMIENBRXIGWQHBCWZIGFUCTHBUVNNPHXGWGYVXMVSAWTHHOSJJIGXFCJPHDPPRBYRIAGFRYEHGQHUKRVXNGRVSSHUCNNMRXUCBPFTZCBGCPZBPUNIEXGFWACLAEOWFUQTOGFLOYRAVCAKKWMKGUQYAWVVVPOSBPOUYEHMJSPCXXAQDRVLTRNZEGQTFDSEJIGLCIPGVDYOWYMEIMGOGKQTWKBNJQNWGOEKAXLJMBWATKGRBYRWXTSJKXWFGHUGVTTTSAQQXVGWAVLTTKFVOEUKCWQDYIRQIZKKWMEOGELPUCHNPHIACHFXIGRNWXGEBHWGRASJDPCJDYIWQQNVWTTVPNVWXPQBQGVPGFVRTIPEKQRDIVTPHBIIIKCHUGVHEGSCAECWYSAVSCLCMVPKIHJSEUIAYKBNFVTTOMFQVIHHKNAHDVCHFGEIUCHFFSRTVGRCXQTVGNPHHHOSGKQTLFCOCXHXCHPCXHYQFLQYHXGOFULTVQIYFRITPGJGVTBVVRTUJXUHVQRXMFWQPXBNEVZCXIXTKUKGWPCMFJIENVWGULTYGZGVLPMUVRYEHWQNVPKDYHOAFLPWLIFVFTZWBGQHGXCAGJEILJSJCWLTNYVPKWTPRVPLPGFKVVLSBPOUCRSLCMVPKIHJSEXIGRGOEPIHMNMAQASBPOUVIAEOSGJIIKWHUFMSRQIRXIGXCHNDEIPJSAUYSWGBYAXWNODGJYBIFCJPWWXEOZGYEHPOUGEEHHGGKGZLCBQFVNEGOIGWPGFHUGJPENKNUSKXTOYKGTPCGAQXPUKHUWVITPRFJIYNODRFYEHPHBJIGYGSGKRPFQARPXHAGZBQOTWWDOWXXMYOFCPAWCFXQZTKJSNFFTYQFRJIGPCGNPSIAGFYQRVICGFCKTTPRGJILAKHRTEQUKHJCWHMKZYKRHBIVGJYGKAWAIHDPPWGVLTKGKNURDMCABOICMVCOGPDLVOJCCLXPHNNMRXNWXGXWXYWAFECWYOFLYHMKBGKQTMQVRCVXMUOLCWXMVIEPISTECEPIGHJALGEGLCBQYLXLMSEULDPNOGGMILISGVMCZUVRYEHVNCFGFTAKBQKXLAGBFJIINTBRFXWXECEPIGUWHGJIGTDPVVAPLPCYQRVXTHBDIHXGBFJIUHWBQJIGLGZSKRPEQBTNSLACZYYLXVJKNUPXMWDOAEGHYCSNEBIUVNPKXGITEQQIAGFBQJIAGFRYIGXFCBTWPENFBWRSMJSUCPAUWHGJINPGFRCPAEQQXGHPGFKUGRPEKQRJESUGSACPAMJSJCCSHYBBPIHBFSNPHJIVVRQXWXTHEAMCZGJRTCSHQFFJILTNYRFWPWNMQQACMJSZKHSEGKBPHTKKBTJSLLJSJCWTOGFGQKTMQIGCKPBPGHFHTGNMFJIRTOSHRSCTNWGVPTMJFRGPTZISQVEQEGOYNQPWGCSUSABFUYCWHMJSEGAPLPCGJMCZQBVVIMVGDGCXXGAUBNHTGMSLCRSTNWPGWUBTGGVLDNIVGYEHMJOGKXBBIVGDIAHPUGQSCXQTGJISHQFFQJIAGVNNPQNVOYCWTBVVRTXWXNCPMWLXTSGQSATTURQVIAGYRAAPLVCBUQPENPHVEITPMECXTBVKBWPSGQHBRICTPMBHXWXOVBYIKXTCAVLTLGQBPHIBOSEQYCWUVREEBXWDBPEAHYQHTXPBPGUGLPWPCGPSIBESQDIUHTSNPHQXJWAFMIPCGNNMIMNSQQSGTDCHVJXYVSRPMCVJSFJMVAUVRVVXXFHUGPXMVZRISAWGBXGCXGVVRNSRDCBQVSWXTUEGEIWGZVILIBVTVVXTWCZVEIDIGBRFXWXFCBTECWHCHPHIACHVVPTWKBGQEHFCZYREHLCURPSIFWQUNEGZGFGJECTTOGJSAXUVRMRTEVRBYRPGFZBQOTWCZBPKIAGDNUWPZGWAVSIAGZBXIABGGGIEGWGBLQYTOGFFCAWHYGUGPDGISQVSVXVCHVSUMJOGFEGDJOYNECWYOAFIGTDCHVEBHPUGJSHXDSQUSUUTWTJXUEQKRTWPGFHUQWTVQCYHSJGVOVPWQNVGUGGDNNRAQXTOGBTGXWXTVRCHIATCHILIAGRBQVLTAOAFIKXPWSOCWXCRJQYAWICGJVDNIVGJSJZJHCQSGTNWPGMIPQIYFFTHHJRTCABVHYGYHXYWGJSJMOMFJSJEFSEUSWAQKVYMHAKQBWPSLJIGWTABMSNVIAXUQBRIXMJWAMMRHWZQKJXHPZLMRTPJCJVSQXIWAHSGRQIFGIHHOOAASJMQTGJILTAHUKRVLJOQJEEIGBRFPPMGZLVLPMCZVEIWTFPRIYCMQHUKRZMJOGXIGRHSJVLXGIGVPHTXFKRTIGXCZYAMBIQGFKFAXVVRTIHXGARFXDUGBBWWTBPKNKXXGIPLVLTEKHGNISHQFFQWWXYSAVFPVMHBVLTMCPYGLPEHVBRMCZUVROMVAVTVPHPGQHUGVZXACAKXDKCHNPCGTVSNDSDDQTEWPTLHCEULJMVWAITTHRZRWTABMSGGPTLECCGWIAKGGKQTLJSSQYCWCZVVXAXDCGVPTHPWGYLXVJQRTXPBPZLYEHGQHUGVTUGTBTIHTKRNNMRXCBQTSJGFHUGRTVMCSVLTUQHGNILTUOCCTTKNOOGPLBVVGJILHTRFFVXGMARDIPNVWSWPARRFVPXTWQBVVMCECFTGPTMVSEUMIPCGNNPKXTMJGPAMQGNAHGBPYZGFJMVVRYMHXNWGVPTTNWPGAPLPCGISXGIHBFSIACHVPEWNTFLPSXENZBQOUBTGGULTLCWQCRSLGSJJIIAGFVVWBTTYRFTDBUCAQVCHVTBTWWXJOQTIPWUSIGVPEPWPGPXMVZRJMHMQFVGWPUQIGELXEFFRPAWHJOQISIUWFAVECWGOGGRJIDMJKPSUGOFVWPGFCGJIGNPDYGEHTPHGJMCZUOYNFTVCIFGXWXAKBWPSGQHEGQTFDSEVLTLKACNIGNNSFVLTBTTEKICWUVNFXPNIVGVLTFUIPJEHMJOGCVTWJCGRSZXTKVNPQNTBLQYXYACHJSAWKHGQSAHPUNPHIACHVHCDNEIGASJKHWAIIGOGFLFITINMJKXWTMBVHIXMWGHCPARDZRGHHTPRFJIWTFBRXIGYQFTQXIXPHUCXXYACHFVXGMAHELUKQANDSIMNSZCVZXFDBKWDGKHVUEAFQGGEIGMCWAVSSBUOTTITPKHUASJLQCAGVDKNOGGVWHYSIGVIAKGOQXIEGKNURDMOOEMISIQWFQRHHCZVEIKXPHHTISMQHNUXTBVOAFJXGFWAIMIOGFLPMRXKHUCHXGHOPVEHHTHBHQXQGRSNEKHWFBHGWXTFLVEGMEIFVEGWRWAGEEINSEQEHMVIEMINMQTSGIPGFVBVFJMVSEGHIHCGGULTOGFLUSDGHWAKWWXFWGQJU
CGEOFNUMPRMGWTGCZMGVNJIGGBRECEMGWTGCZMGVNJIGGBRIURISEWFXBUWGQNAHUYNOSBZSWCYCFPBRMFQHJUFBVRYCWQUISJSYCRNWGQNAHUYRXCPBBNWAWEMRHFVBMVNJIGGBRASNMBVCSFVOVGCGEOFNUMGRUFWBBZQIFXHRAGVNJIGGBRADECAOCSBBXSVNJIGGBREWANRZCSXRADNCEESUUQMJRLLBVVHTJSSIEMIFQRPOQHBBVVHTJSSIEMIFQRESEYNTZTIVVUQCEMQGNBPSNPRVKRQRZSNFYOCVHTLWEYPBHUYBBVRLJIMVHFPCENGPSCYEQCQQNAGBZNZZVERBVRJEMGRHGXSECBLHUUGACZYBNWGMAWWFCRAHNOGPCECGQSFCAAWFNRLCACGAPRCAOFRWRQJRXSWFTIBLCEZBZSICYQBGBRAICYETOGCIMRRAEMSBZPWACUEQGBHBVZLNUMFRQRZSNEVVUJCGPOYUEOSWUJIBQUDCSRHJQHUUCTOVHSIQRIABVRNUZCAYBNSAAYIBQNUMFRQRZSNEVVUJCGPOYUEOSWUJIBQUDCSRHJQHUUSIWEZNKSBHGPSGBEWBRISNFNHPMWAVBBVPIHVHECRAWGQNAQYYNZSENUIBPLLAHNFGWHUYYWFQMBNHUYFBOGYCZSFYEDSFISTCNPRAOAXSQGUYFBVNNGPWAAFQBTYAMFNFJMFRMRBHYYQNCEYIMFVNJIGGBRGSNLBNCHLYWFQIAMHUIHAOAXFMJRHUCBQLRLOAXFMJRHGGTVPRADVLVBINFEMJRFNBWBHFESEYPWBPYQMRGIRVUYUALOGNUIHSUIWIEYQXSECBLOFUGBVVMZZGFIHBVPIGBVNXEMQRHGTMNNGIWAYQPSEZVDSNHQBKRHGQSGBOTSFMRLPVLGPRNSBNKUIZIDEICPSGCPXFVPNBSVHGPSYCSMUHUELGUUQPSEUYLSQNUMGHVYQARUCXSNLNVQRVLIBAIHVQVHTBVNNNZFNHTMARHGAKRLRUOQYSWFGBRAKNFYWKVHTCDBZYWBQIAIBQQRAHZCAAHRLRDSANUMQBWXTOAYTPCFNUIROYRVZNCQWBYSNZCHHQLCMYAWTLYNZGNZGMFEUCXWAABCHVNFUSFMNOSFUFBVRMCQFVNFWTGBVAJRLLGSNLYIGGJNAHFOCMFAUGCFNFYGRRZVKWRHGQBBLVOWAUYQHLLNXDRXBCHGBRQFFGRZSZYFAOTYFQBGBRMOENUTMBLQMFBZRDSANFPOQFNBSYSPWARNBBVRYAOZVMUKFBQAIBQJRWDYYSZCZUPWBTLRAGBZOZWGCFPGHVWMQGMVVOZYEQQNQUQQUMGZOAARBCEYYIHRBNDSCLBDSQGBZSVGCWFGUABHBNUMVHGNVFNWRBVNHNVMPIZUIACPIHVIAAMRNEMQRCIMRGBEWITBNVMBZGPSPBVKYRHFWTGBRKCPEYIBRVEWCQZEIBPYYMGFZNDCHLRLCANUMKUIYMOFNBUOGNRZGFJVZWGONTHUUAPSEMVAHRLBNHUYFPWRFQIBQNEQRRHGZCYFRLKVNUMLPYRLWAAFUCBNUVSFMQWKABVTZZUXQBTJNXSEGBVSLUALGCYALWAAVBIAXRZHUYTCWQUAKSBZUMFPBEQGGCNVDNMGWFFMUMSANRZHNCAMRUYEASYZOMGVXRAKVNUAIPBUCANHRIQUCRDSZYABGNMFMBGYAKWAANGCHNUBCUUIMVVMUIBQMPCHBZSPWFNBVUHYGWFAIHBKVNUXWAWRZGNHQPWFVBLMOOEVSQUYQJRVRKOHMRPSUUQVCGEAMSYYQLCJHVVHUYEIWANBLCUIAWIENBIRVLGGDEIPMGFCBVCSGBVYFQUQQUJNAGRXJQHUCAPWFPVMKNNNLWFNNVQRISACZYSQTGSBZGVRGGMNLQAWGCFTWXYYGSAIHOVGBNBFBIGMRVHGPSJIBLGBZSZOAWRIBQHBZKNSGPSEYJMFRAEWKVHTBFRYFEVRHGPOGMHNTRLRZKNMCCHGIQMOGBNTFRUQGANLXMROSGPSJIBLANHSIHRNBKCZYQWKAUALPRMNEBVHGWPBUELGGIZIYRUPMFGUVVABPNJZRZEIARQBZYJCGPOFUPSOAXNSBVZRQBVNGMFECOTSVHUQGGIEGWGCFTWXYYGSAIHOVGBNBWANUMFBOTPCHNUWIFYFWTFIZMHVFYMFFISBVRBRIJLFNVRFUQROPYABHBJNZWFNUMFRQRZSFBRTHRLRLTEIZBVRQRIHUYEBVNNIMFLXNGFHXRKOENFJSFJNBHRLRLKVNUZIFNVKAVLRABHZSMRNVBCHOSCQUFUALFBIFBSQCAJMCIHTHESJPWPBGPSSUEUSEXRIHUBNLOYLRIRLMRBOCUEBHBVRPWFNHUPECYACSNUMFRPBTIGCBVPHNGPOGQBWRZUAIBQNUIHSUEUSENUWITBGPSLQBZYHHPMOFCAOZLQBZYFCYMBGFLIBQHBWBRBRIFQNUMANMGPSLQRVHNVBCHJCGPAHZSTSQNEMOQNUMFNNUMFSIEIGZOPPOFNBMBGYEBOVHNVMFOFXWPCBVHUUGBVRSJMFRUJIYRQNAHBVRIHUYVAHVWNTOAXGZOVNBZCHMVVSAAYIBQNUMFRQNAGPUEKSYSNVOZIHVHBZBZRRLNVRCLBBSPNVWBGIWCGGCSGAHWUVOGCBVOYVBIGGCAORNLVVUOOEOZNLVMGOSNZARXZMBNHQPWTBJIMEIOJSECRAHBIXXZNWRQBGBRKOCCGIZVNFMZSYIMFLHVOVGZNUWYCRAKRLRXIOFVKZLWNCHVIAMRAIGBCTIBCHBZGWKAQVBVBOGZSZIIQBTNUMWEZHZBVNHZSGIHXVBFFBSEYEAKNLRPCHMRATBLFMQHLVBMGBRPWTBJIMZUAQBGBRLOEEJIGNWVBMGLNLSFGNVWANUMZVAUBOAXOMWAAEMQBAAQGRXNVRPBNTZRHTMROSUQGSYYTCJNEIRRMZIBJBBUVRMGWDCYQQBUCFKVNLNKHRLBNHUYPIDGUVVUNFYIBGFLAVBNUQAGBEWITBGPSUYNLOAXEWRRUJIMGBRUOVFJIGJULTOVXOGGRPRVFBVOMFFUALHUYTCOEXFPCGNUZSRXRIRNHQBVRHTWHFBBBRRUQPWZMRTTOSGPSBNUMFSIHZWAWBVGRKHMBPYBNHUYSIWYOEMCSBVAOZGHVWGCBVOSNRZKUCPPHUYZIWYQNAFBVOMRVHCMOPYGPOGGNOBVZVKSANCWHRHGIHRNUMZBLQUOLIEWTYIALCAQNAANXRBCFNNVRNHQLSYCIMFBHGCFABNUUEYRVPLIAMVVAUEOLGNVKUIQMGCIVTSQNUMWYFHAHECBCGPLRIHHLRQBFCTPHBZNTZUCFZSGCACSCLVACAYEAWAFBVRBHTICYMSWITBGJOGNYMGJCGPHUYVZHHLASSLMNVRGBRUOWYFBMBZGPSYUJNWEYQJZHHQMFOOFASFCAIABHTBVRGYWOQYQEWGBEWIAXFWTFBBBOAXOIZYNUQSIYFABVJCMRBZSLWNGBVRPLBAGRMSZCZNUMBRWXACSHBJZRFBZRFUGKCHLGLFNQVVUEIBUGZOFSSGYRZGJYABWANBAHTCYMGFNBASNLPPTBLPWBGLNJOAXTWCQMNVRGBRUCOZVZSQIABVRGHAYRNRMFFUALHUYZCGXYGMSEMSQFRXBVHUYZWPNHQVCOIQGHUIHOVGUAGCSNUMGRIPKIELRVQRMZCQUIHBCSNUMQBGZWBJULQBGBRUWQMGWTGBRUHUYUIBTGNVSIYEJIFSNVRRPRZKBLFMHUUACGRFRAGJUFQBPIAAHNHGZSDOVAWGCBVBBQFBFVHTQBTOCTCAAEWKFISUWFWRTZNHRWIFWEQAVHNTGAIJPOAAVVUNBBCGRVEMOXYEWBFUGCFQULEVBBNLPRYABOXYAWBGORARNSAWKOOEVWAACMCCFRQBGBRPOAXNBBRQTIHRVLBVRXBHSAUALBBQOCFACAODNGCPZRNFIHGBRLCBLBNKRMGUWAMGMFUUYTHBXNGHNEVVUGBRTWSYBNOAUGZCPCBCGZOELSEYEIBQNBUCELBECSUJZSGWUMRCCYNSEYEEVBBNLFBVOMRNZNZARLFJCLISAWKJRVQRUYTHUYFMHUCAOGNHQIHUIHAOAXYQYRNUMAPUZMHBJNAGVHNVRPFBASHJBVHUYQMOEIYLMRUEWBRNUWIFUALGRPRVVHHQZSQUALGRPRVHLZVDSRHIQFBHRLPLNUMAJBVTSGBRECBXZIBNHQBVRZNZARLJWFXYQCBUYRLSQNUWGRNJWCSNUMZNLTMXNQFIBQNUWGRIGPSENJWCSNUMDYUVVOAXGPSSUVZTNWRAHEIQEWGBFBWEYAWITBNVRPUEZWRXGPSVLQQJVHRZWTBGAKVNUIVVAUPOAXGPIFXVLHUYLMOEIAMHUIHAOAXFMJRHUCBQLRLOAXFMJRHGGTVPRKCAXHKHGBRQFTLRIHAYFASFUALALLVIRFISAANFYKFRUGCFRMGPSPLRIHHLRACSNUQGPBEWBVWYMOZIAOHUYEMGGUYWBTNUMFBUQAHUUGTOLVRNCEYGPSZ
More ciphertexts are available at https://mathdept.byu.edu/~doud/Vigenere/.