From: Neil Smith Date: Wed, 21 Dec 2016 17:08:56 +0000 (+0000) Subject: Done 2016 8a X-Git-Url: https://git.njae.me.uk/?a=commitdiff_plain;h=7fe8e2344e8ebc35c1014cea76d3f9c4de316ad7;p=cipher-training.git Done 2016 8a --- diff --git a/2016/2016-challenge8.ipynb b/2016/2016-challenge8.ipynb new file mode 100644 index 0000000..7a96e70 --- /dev/null +++ b/2016/2016-challenge8.ipynb @@ -0,0 +1,191 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import os,sys,inspect\n", + "currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))\n", + "parentdir = os.path.dirname(currentdir)\n", + "sys.path.insert(0,parentdir) \n", + "\n", + "import matplotlib.pyplot as plt\n", + "%matplotlib inline\n", + "\n", + "from cipherbreak import *\n", + "\n", + "c8a = open('8a.ciphertext').read()\n", + "c8b = open('8b.ciphertext').read()\n", + "\n", + "c8as = sanitise(c8a)\n", + "c8bs = sanitise(c8b)" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "(matrix([[ 7, 8],\n", + " [11, 11]]), -5760.41300554484)" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "key_a, score = hill_break(sanitise(c8a))\n", + "key_a, score" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false, + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[('a', 312),\n", + " ('l', 243),\n", + " ('x', 228),\n", + " ('r', 220),\n", + " ('c', 216),\n", + " ('j', 214),\n", + " ('d', 210),\n", + " ('i', 208),\n", + " ('b', 207),\n", + " ('o', 198),\n", + " ('h', 192),\n", + " ('u', 183),\n", + " ('z', 169),\n", + " ('s', 163),\n", + " ('m', 162),\n", + " ('g', 160),\n", + " ('w', 145),\n", + " ('q', 143),\n", + " ('n', 140),\n", + " ('f', 135),\n", + " ('k', 133),\n", + " ('p', 132),\n", + " ('v', 131),\n", + " ('y', 128),\n", + " ('e', 120),\n", + " ('t', 90)]" + ] + }, + "execution_count": 3, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "collections.Counter(c8as).most_common()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "charlieandtrinityithinkwehavecomeascloseaswecantoasolutiontothisveryoddcaseofadeadwomanwhoneverdiedaweaponthatneverexistedandagovernmentinitiativethathadnothingtodowiththegovernmentmartinandjameliawereputinaterriblepositionihadntrealisedjusthowbaduntilireadtheattacheddocumentthatirecoveredfrommartinsandjameliasharddriveittellsthewholestorythesyndicateprobablythoughttheywerebeingcleverwhentheyfakedjameliasdeaththerewasaclearthreatthatonceherdeathwasrecordedassuicidetheycoulddisposeofherintheirownwayandintheirowntimeifshefailedtocooperatewhattheyfailedtorealiseisthatonceshewasofficiallydeadnoonewouldbelookingoutforheranditmadeitaloteasierforhertodisappearwhenshewantedtohavingbeencutloosefromthegovernmentthesyndicatewererelyingonsourcesintheinternationalintelligencecommunitytocarryoutsurveillanceforthembutnoonewouldbewatchingforaghostandtoomanyquestionswouldhavebeenaskediftheyrequestedasearchonceshewasofficiallydeadithinkthatdynamixrealisedearlyonwhatthetemplateapproachcoulddoforlargescalenetworkanalysisandtheyrealisedthatjameliahadthetalentandmartintheambitiontomakeitworkasasmallcompanytheyhadnothingtolosebyinvestinginitbutwhencitadelleheardrumoursthattheywereworkingonsomethingbigtheyrealisedthatthiscouldbethebreakthroughtheyneededtheirmassiveinvestmentinconventionalbattlefieldweaponrythreatenedtobecomeobsoleteonthecyberbattlefieldandtheyweresearchingforsomethingnewtorevitalisethecompanyatfirstithinktheygenuinelymisunderstoodwhatdynamixwereworkingontheconfusionbetweengravitywavesandgravitationalwavesledeveryonetoassumethatdynamixwerehopingtoweaponizeseismicactivityperhapsviaaresonanceeffectbutthiswasneveraboutaweaponofmassdestructionasjameliasexposemakescleariamnotsureatwhatpointthepostdigitalsurveillancesyndicategotinvolvedtheywereinitiallysetuptoprepareforatimewhendigitalsurveillanceisnolongereffectiveaquantumtechnologiesenvironmentinwhichthecontentofcommunicationsisencryptedsosecurelythatnoalgorithmcancrackitwithoutbetrayingitspresencetheywerekeepingacloseeyeonallthesoftwaredevelopmentteamsatarmsmanufacturersandhadkeptjameliaandmartinunderobservationwhenworkingfordynamixtheywerecertainlyquicktorealisethepotentialofthesignalnoiseanalysistechniquesthepairhaddevelopedforgravitationalwavedetectionatsomepointthoughsomeonerealisedthefundamentalflawinusingatemplatebasedapproachwhichinabetterworldwouldhaveledtotheendoftheprojectunfortunatelysomeevilgeniusatthesyndicatesawasolutionandgiventheobviouslimitsongovernmentactioninthisspheretheydecidedtoleverageprivatesectorinvolvementgiventheirhungerforrelevancecitadellewereanobvioustargetandwerebroughtintothepictureunfortunatelyforthesyndicatesomeoneatcitadelleblabbedtoaseniorcivilservantandthewholeoperationwasterminatedthejunioroperativesweredispersedamongotherdepartmentsbutthemajorplayerswereretiredwenowknowthattheremainsofthesyndicatecontinuedtooperatewithcitadelleanddynamixfundingagovernmentdepartmentnolongeriwasthrownbymartinscalltothephonelinkedtocitadelleduringtheinterviewlastweekandforamomentthoughtthathewasworkingwiththembutofcoursehewasnotphoningcitadelleifwetrackthephonewewillfindjameliawithnorealresourcesoftheirownsheandmartinseemstohaveplayedtheblackhatsattheirowngametakingwhattheyneedastheypreparedtodoublecrossthemyoumightaskwhysheisnotmakingmoreofanefforttohidefromthesyndicateanditsalliesbutthatisthebeautyofthewaytheyhavethissetupmartinstimewiththecollectivehasbeenspentseedingcopiesofthefileontoeveryserverhecouldfindifanythinghappenedtothemnowitwouldbeimpossibleforthesyndicatedynamixorcitadelletosuppresstheinformationitwouldfloodthewebtheirapparentcarelessnessweakencryptionandpoorlyhiddendocumentsmartinsappearanceonbanksurveillancecamerasandhisvisibilityonthewebwereallpartofaschemetoensuretheauthoritiesgotsuspiciousasortofinsurancepolicyitforcedthesyndicatetoprotectthemhencethehighqualitytraveldocumentstogetrealprotectionjameliahadtomakesuretheirstorycouldntbesquashedsotheyhadtobuytimesheandmartinagreedtoworkwiththesyndicateandtoconspireinjameliasfakeddeathandithinktheyconvincedthesyndicatetoletmartinjointhehackercollectivebypresentingitasagoodcoverfordatacollectionarguingthattheyneededtosetthebaselineforthebehaviouraltemplatesbutnowthebigquestiondowegopublicifwedoitwilllancetheboilandwehavearealchanceofbringingdownthesyndicateanditscollaboratorsinseveralmajorarmsmanufacturerswemightalsobeabletotracethetemplatetargetsontheotherhandifwedothatwealsoriskkillingjameliaandmartinoncethestoryispublicthereisnoreasonforthepdssyndicatetokeepthemaliveandeveryreasontosilencewitnessesidontknowwhatyouthinkbutithinkweneedtodealwiththisofflinetheoldfashionedway\n" + ] + } + ], + "source": [ + "print(hill_decipher(key_a, c8as))" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "charlie and trinity i think we have come as close as we can to a solution to this very odd case of a dead woman who never died a weapon that never existed and a government initiative that had nothing to do with the government martin and jamelia were putin a terrible position i hadnt realised just how bad until i read the attached document that i recovered from martins and jamelia s harddrive it tells the whole story the syndicate probably thought they were being clever when they faked jamelia s death there was a clear threat that once her death was recorded as suicide they could dispose of her in their own way and in their own time if she failed to cooperate what they failed to realise is that once she was officially dead no one would be looking out for her and it made it alot easier for her to disappear when she wanted to having been cut loose from the government the syndicate were relying on sources in the international intelligence community to carryout surveillance for them but no one would be watching for a ghost and too many questions would have been asked if they requested a search once she was officially dead i think that dynamix realised early on what the template approach could do for largescale network analysis and they realised that jamelia had the talent and martin the ambition to make it work as a small company they had nothing to lose by investing in it but when citadelle heard rumours that they were working on something big they realised that this could be the breakthrough they needed their massive investment in conventional battlefield weaponry threatened to become obsolete on the cyber battlefield and they were searching for something new to revitalise the company at first i think they genuinely misunderstood what dynamix were working on the confusion between gravity waves and gravitational waves led everyone to assume that dynamix were hoping to weapon ize seismic activity perhaps via a resonance effect but this was never about a weapon of mass destruction as jamelia s expose makes clear i am not sure at what point the post digital surveillance syndicate got involved they were initially setup to prepare for a time when digital surveillance is no longer effective a quantum technologies environment in which the content of communications is encrypted so securely that no algorithm can crack it without betraying its presence they were keeping a close eye on all the software development teams at arms manufacturers and had kept jamelia and martin under observation when working for dynamix they were certainly quick to realise the potential of the signal noise analysis techniques the pair had developed for gravitational wave detection at some point though someone realised the fundamental flaw in using a template based approach which in a better world would have led to the end of the project unfortunately some evil genius at the syndicate saw a solution and given the obvious limits on government action in this sphere they decided to leverage private sector involvement given their hunger for relevance citadelle were an obvious target and were brought into the picture unfortunately for the syndicate someone at citadelle blabbed to a senior civil servant and the whole operation was terminated the junior operatives were dispersed among other departments but the major players were retired we now know that the remains of the syndicate continued to operate with citadelle and dynamix funding a government department no longer i was thrown by martins call to the phone linked to citadelle during the interview last week and for a moment thought that he was working with them but of course he was not phoning citadelle if we track the phone we will find jamelia with no real resources of their own she and martin seems to have played the black hats at their own game taking what they need as they prepared to double cross them you might ask why she is not making more of an effort to hide from the syndicate and its allies but that is the beauty of the way they have this setup martins time with the collective has been spent seeding copies of the file on to every server he could find if anything happened to them now it would be impossible for the syndicate dynamix or citadelle to suppress the information it would flood the web their apparent carelessness weak encryption and poorly hidden documents martins appearance on bank surveillance cameras and his visibility on the web were all part of a scheme to ensure the authorities got suspicious a sort of insurance policy it forced the syndicate to protect them hence the high quality travel documents to get real protection jamelia had to make sure their story couldnt be squashed so they had to buy time she and martin agreed to work with the syndicate and to conspire in jamelia s faked death and i think they convinced the syndicate to let martin join the hacker collective by presenting it as a good cover for data collection arguing that they needed to set the baseline for the behavioural templates but now the big question do we go public if we do it will lance the boil and we have a real chance of bringing down the syndicate and its collaborators in several major arms manufacturers we might also be able to trace the template targets on the other hand if we do that we also risk killing jamelia and martin once the story is public there is no reason for the pds syndicate to keep them alive and every reason to silence witnesses i dont know what you think but i think we need to deal with this offline the oldfashioned way\n" + ] + } + ], + "source": [ + "print(wcat(segment(hill_decipher(key_a, c8as))))" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "[('0', 15368), ('1', 11257), (' ', 6508), ('2', 5920), ('\\n', 1)]" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "collections.Counter(c8b).most_common()" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.5.2" + } + }, + "nbformat": 4, + "nbformat_minor": 0 +} diff --git a/2016/8a.ciphertext b/2016/8a.ciphertext new file mode 100644 index 0000000..158e05c --- /dev/null +++ b/2016/8a.ciphertext @@ -0,0 +1 @@ +SVGFL BCSLU JGEXA LYOHA EXMOG RMXSO MACSM MHPCI OQEAO WJOUY EODDP LULLZ HASAX PZJSF LDOQK QJDBZ YHGGG CHVFX TFXPN MKCVH EAQJU LHAWB TFXPV XRDSR AZANV HYMXP PSMUJ OEXAL EKPLX PHAWB XZVUQ ZJJJB LZDFK SHAHA YGGVI XFPCF VDGFP LNNLU LVMUL BUIIX SBGNE XWBIX BPRCS BIOAL MIZXX ZVUJG CSLBC IPCYC HAOGH LZTJO OBKPC SRIDR WBDBS VAZDF SIMUJ OHAWB KPSOG VIXAZ PIMAG CLGEX WQLUL VMULB OQXZN MBMQH OCZCM JNHHA WAFXF JSRAD IFDRG ULUUG WBSBX DHLRC IFFXG ATAHA MWEAV XNDEX GKFJX PJNDR JODRA HCGAZ LVMUL BOQBZ WBTAD RVXYI WQYNC SLGDE CSZCX ZLZDJ GRIXB ZWBRH OQVXW UNMAZ OQACU GCRYT DRCAY KXYHR MZIOK QNCIX EXHAO CXDYV YIMEL UEXHA OCXDY VPLMU SNAPQ VMKFJ RIKUC WHBPF JTCHW BHAMW JDOBA ZLZVX KRSAO CSRXZ LZDJQ IDRYI EOXGU GEKJI KLCSV UCWTF GGUDD SMJCW EQJBY KREAD DRPFL UALGC BZALK RQZCS IAIXR BTEIX LZHRW QRSCS JNDRB DDRYI JOAZL ZXZDH JBNDC FSINS CWCIP IMAHA YGGVI XFPCF ZCDRG ULUUG WBWAI XIXMJ YOJBU LEOQR UOIAJ ODREX JTPSW BMINN LBJOM JLBWG DJSOM AKOZX NFLZO WVKUC GNACB COCJI ANUOR BLGDR ONGNV LULWA YKXYN DYITX JJJBR BPFUN IODBL ULZMA ANKYQ ESRMI BDGGU DZGMX KDIKN NYWAZ SNHAM WVXMG QIJTV HCIGF SVULU OAPWA OQIBV NAGKR JVBZY HALJJ PTHAW BFLNN SMLYC SLBCI BZGFJ VULCH WBHAY TUULA WBCSR SXDQW NVYKX YDFRB ZWGFW GMMKR CFYTG GRLAN KRAUS AANRI DRSJC SLBCI RIXZX WSCMJ EKXZR IDRDB FJJOA NNJGF PLJOD RSCTV PLULL ZGCYY ALGGR LOQOQ GCJIW UWLAN IFDRQ DYHVL HAEXM PEPIO KDYOZ KQIPL JBEXA LLXXJ DRDJA LYHMJ FJDRG FBMCO YKDVH AWBHA MWEAV XGGRL EXYMB DMAYT JJJBT VMPDR SJCSL BCIRI XZZCJ JMMYK XYNDH AKDVX CGHAX DGATA DRMRI KBZRI DRKPG CKGQH OCZKQ IVDCF PLDJU LXPJO MINNH CWBNS QVKCX YEAQJ ULZJH AVXWB CFAZL ZNDWU MUCJE OFJJT ULHAS OUPIX HLZCF JVNMJ VHLUH AMWEA VXCIG FSVEX ERADE OMUHA EXQBW ALZVX DHDBL BCIHA SOMAB JXRWB VNDVP LHAEX OHDRI SCFWW TFJVS MACLU IXSRC WPPXZ BIMRS CGDEA VXGGR LEXYM JODRW UBQYC MIVYY TEACF WTMXA LGMMX QIANR VPFDH DBPLU LKRYI XPGHA ZOPIX UCTFL ZOQAC MUHAW BFLNN SMZBI XGRKH EXMPO GCSJH ZXZHC ISASM OWKXQ HALCN IXXZP ZDHAA VXEON NDJIK XGSOL MGNHA SAYIW DOPIX ILYKD BEAQJ ULIBG CKGBZ SRTRK XMINN QLSCM JEKCI VCIOU UCGQI YNCSB PSCVL RRQRC SXJXZ TKGIJ OHASB IOBIA YALKR ACBCO CJIAN UOGUL UUGWB YGQZE XZVLO AZHAM WEAVX EXALE KJIAU YTAVL ZHOSB GFQVA DWBWM WADRL UAYAL KRACB COCJI ANUOS AVLHP JBIXQ VPVKX QHCSM GANHN CDSOX MEPQM KCCIZ KKPUL MUJOE XCHUG TADRW UJOCF LZZZM AKOZX OWPLU LIACI DJZJX KAZEO CISIV XJVHA WBVLK RYMBP HAWYA NUBQW EQXJA LFXGN NDJGK EEXCY RRHOQ ICFUO HAMWE AVXYY SBEXQ OYNIO IKSWU LKRVS DREOF EYIVX BZXPH PTLCF ZCCSU SWBGF USGCR ZJDKX QRIXW QLUXZ XNSBX WSCMJ EKANN JGFPL RZLUI XCJCI BCWBM IHVDR HVADE QJBRB NMMRS CGDHA MWEAV XUOLG MKXEK YWWQC LZVXK RSAYT DRJHJ TJOEK HPFED RIAQB KRVLS ACSNN JVIAS RSOXM CEQES RDRBJ KPXZT OOPMJ KHAZR BLTPF DHDBP LULKR YIXPB ZJTKX MINNR RMASB GIJOH AYKUN EOMUU LIXCS LBCIR IDRNP LUSCC FDBNU ZRKSR ZIAJB WBUUL AWBKD OQAZQ JHOUY SVCHU GJJNN NDZCI XGGZW PPYKX YXZXP FJRIQ ZDRCF DFFED RHOOT SOHNB QADHN NNJTJ VEOMU OPOBW GZXYC WBHAQ IMRHR OWJTW QYIEO DDPLU LANRV QHCFH AKQTI MIYCL BSMRR ULYMX PPSMU JOQWP LULEX HASAM ZDRVX HAMWB ZAGBZ RIEPO PIXWO SBBPR XJTCI KXADE XZVLO UUCFZ PQHCF HAOCT EKZWG DIADV XFJRX DJSOA LYHMJ FJEAV XANCJ DHYKS RGFWG DBLUE AVXNQ YKUNP LJOQZ DRNTK XQRGE BQADH NNNJT JVRBL GDRGU LUUGW BQIMA KQTFW BAGDB BZJIK DZRPW AZLZO QCFMI FBQHO BCIBC ANDBL UHAWA FXFJK HIXWB MIHVO QJTHH EXWBA ZHAWN KZMIX DHBPF PLXPQ YIXAZ SAHBD VAZSC ULYMH AIXBZ BJLGM UJOEB GNHAU UUVAD LAKEI XQYIX IXYTK PAZEA VLAOV LUJXZ ZCDRV XGCEX EOFED RGULU UGWBS OULPL RZAZL ZKHIX WBWAA LNVAL YHMJF JANTO MRSCG DNPLU EXQOY MXPPS MUJOB ZBJLG MUJOV LHPJB IXYSO QHAXD YVRPG CLGEX MMKRV SQZDR FIULM JEXYY RIKUA LYHMJ FJZTB PJBHA OCJOI XDHWA ZRSRE AEYAN JKADS CMACF ZCFXG ATAHA WBDRY IQYAD EQJBK SHAHA UULXL ZZZYK DVGRW AOQVL TKFXZ XJBAG DBBZJ IOCDL YTPFQ CHASB FXTFE AKSJI VNLUL VMULB UIALX MADCS FWQIY KFBQI IBHAO CXDYV APCSL UGCLG EXCIU USRYX MXSBZ RSWRI DRRCQ WWFWB WQZCD RKPOG JBSCY TCGEX KWXZZ CDRMR IKVHS RDRCN VXBJV XRISF YKRCS OXDKG HAUUU CCOAY TAOQM OHDAP OCWDQ ZGCEQ JBOAV XIBAN QVRBL GLZJJ BZPIM AHAQI MRHRO WJTAN HRRRK RLBQI LXZCX ZPLSR DRNDE MNFIB HAWAK EHAMW XZXPH ASACI HNTLG FPLBD PLMUK SHAHA SOEPF JKXQH GROQN DCFMZ CFRRI KHRJB WUNTQ IIBHA QVOBK QJOAQ XPZJC IBCIX DRWUU DJKEX HRJDX RHAEX UNQJH BTFRI QZDRG POGAL GGUDD SOCWL IOIAR CQVAD HAQIM RHROW JTFLN NSMNR FBALY HMJFJ LZACR SVXKG HAOCB QADGC PLULA LGGUD JKHPS FHAWA KDHAO CPFRS GFCFT XGFMJ QIWDQ IQYCS YYDJZ JXKMI NNLUJ HADJV JJTOC FDFSI MUJOO SGFPL BDQJH BGFAN UOULH LPTAC BCOCJ IANUO OWMUP FWQLU JJINS AMVOB ALUCJ ODREA BTIXC SJIBJ LGIBO QSVUU YTAQB DQRYT DREMH AADAL KCSEQ ZACMZ UGMIY COQAD LZVNB DQRAN UOJHL BYAAL RBFBA ZHAQI MRHRO WJTLZ HOQZS OZCDR KBCFU OHAGR AYVTK MLBNF JGMXM JDFSI MUJOS RQMYT VXKRH OQZSO PLULL VMULB EZYHL ZGCYY ACVXH AOCDV LZZJW UUDVU LMQIM GOQDR JXQZD RQDYH LZLXI FWMQI DRANN JGFPL NNWTI KRIOG ADMOA LTADR GULUU GWBCS LULZW UBDNT VXEXL VMULB OQJDY YTOCS HAANH RHAEX OHDRC AULDH DJAZH AQIMR HROWJ TLZFJ VDGFP LHIGI JODRX ZQCIX WUJIS OPLXP RPHOQ ICFPL JBALO QWOCW LDGVI XRBNM WBQWE PFJKX MINNL TWWJB HAWBH AMWTF AZAZL ZCIZC DRHLC ILBTF RBLGD RNDXZ DHYKP FVSUU LAWBQ ILXDO OGHAK DAYMG QIPLU LDFEA YMFVR CUGSN EADFA LKSJI ZRDJY TDRPJ OBANP PGRMX CSVXK RSVAN UOIBN QEXCY JBDFY VHAQI MRHRO WJTAN HRRRW UJIIL ADWBA DIABD OPIXK RGCTT PFHHO SANYP QWHNV XDVEA SMUND BNHCJ CSRCY TQZPF UOHAY TUULA WBYTG FWGRR ULHAK QHAIX XZLUS NEADF HAWBE AKREO BPYWE QJIEX KJSCM JEKAN NJGFP LVLDJ YTDRS RADYO MZSXL BKXDR VXSAV LVXOQ ULRBL GDRZQ KGMRH ROWJT LZYYS BHAUU KRQHC SLUOP IXSJC SEOJO IOOBC FUOKS DOQIC IIADF JOSTO GCHWB UCGNJ JPTLX PLHAE XMOCF IKRIS FCSTZ ALTAJ JEOXG LBTFH AKQXY JDAPM ITFPP KE diff --git a/2016/8b.ciphertext b/2016/8b.ciphertext new file mode 100644 index 0000000..7e2d938 --- /dev/null +++ b/2016/8b.ciphertext @@ -0,0 +1 @@ +10200 20020 12002 11120 00210 02010 21012 10021 10201 12011 20002 00101 11210 10011 21100 01121 10000 02000 00012 01112 00012 00012 01012 11002 01012 00012 00112 01102 11002 12020 20202 01121 10210 12000 20012 00200 20121 12102 00102 00102 01002 01002 00002 11111 21110 12010 01200 00020 10002 01110 02000 00021 01110 20000 10200 00002 01110 20100 02000 11200 01121 10002 11121 01210 02010 20012 01200 20121 02112 01020 00200 12011 21102 01102 10102 00102 11102 00012 01110 11200 10010 20010 00120 00000 02001 01002 11000 11111 10210 11000 01100 21010 10110 11121 01010 00001 12010 10000 00002 11101 11002 10100 01002 11100 10012 10000 10012 01000 00102 10200 20020 12002 12020 20202 10211 20120 02002 10111 21000 02100 11210 00020 10002 11100 21001 02010 01200 00120 00102 01012 00012 00112 01102 11002 11120 00210 02010 21012 01121 10210 12000 20012 00200 20121 12102 01210 21120 02012 11112 01002 01112 10002 00012 11002 00102 00012 11112 10002 10200 20020 12002 01012 00002 00112 01102 11012 11002 01102 00012 10012 10102 01110 02000 00021 01110 20000 10200 00002 00210 21120 12002 01012 00012 00112 01102 11002 01112 00012 00012 01012 11002 10000 02000 00121 10011 20100 11200 11002 11112 10002 00112 00002 10002 11002 01102 00012 10012 10102 00012 00012 01112 11102 10002 01100 10100 02001 01000 00020 01010 00010 20010 10100 10200 01001 11002 11201 20120 02002 11011 01000 02010 10101 00020 11111 10010 20010 11010 10210 00001 01002 01002 00112 00112 11102 00002 01200 20020 12102 11121 00201 12000 20002 01020 00200 12011 21102 11111 12100 01021 01001 21110 00200 00002 00011 21000 12110 00201 00020 00002 11001 21000 12100 11210 01120 01002 11021 10201 02000 20002 11121 00201 12000 20002 01020 00200 12011 21102 10112 10112 11012 01012 00102 11011 10121 10100 01201 11101 12001 01011 20100 00002 11201 20120 02002 01020 00200 12011 21102 11010 21010 02001 10201 10021 00002 01010 20000 12001 01201 10121 10002 11002 11102 10112 00012 00002 11112 10002 00112 00002 10002 00200 20121 12102 01111 20101 12110 01200 10020 00102 01200 20020 12102 00001 11020 10100 10210 11101 12101 10101 20100 10002 11021 10201 02000 20002 01020 00200 12011 21102 10101 21001 02100 11210 11020 10012 10200 20021 12002 11102 10102 00002 01002 11012 01012 00002 00112 01102 11012 00100 20100 02010 10201 01021 00002 01200 20020 12102 01200 20020 12002 11112 10002 00112 00002 10002 00200 20121 12102 10101 11020 01000 10201 00101 12110 00001 21000 00002 10112 10112 11012 01012 00102 10200 20020 12002 11021 00210 02010 20012 01012 00012 00112 01102 11002 01210 21120 02012 11002 00102 00012 11112 10002 11201 20120 12002 01102 00102 00002 01002 11012 11120 00210 02010 21012 11112 10002 00112 00002 10002 00002 00012 11102 01112 00002 01112 00012 00012 01012 11002 11100 21000 02000 10210 01020 10012 01020 01200 12111 20002 11121 01210 02010 20012 01020 01200 12111 20002 11102 00012 10012 01012 10102 11002 11002 10112 10012 00002 11211 20120 12002 10112 10002 01112 01002 10002 11211 20120 12002 01020 01200 12111 20002 01102 10102 10112 00012 00002 01210 21120 02012 11002 11102 10112 00012 00002 11201 20120 12002 01001 11211 10001 20011 10020 00100 02000 00002 01101 02010 11120 01101 20000 01200 00002 11021 10201 02000 20002 12020 20202 10211 20120 02002 01001 12111 00020 01011 21010 00200 01012 00101 11101 02101 10110 00021 11001 10011 21111 10101 01200 00000 01002 01020 01200 12111 20002 01112 00012 00012 01012 11002 00112 10112 11112 01112 00002 01112 00012 00012 01012 11002 10000 02000 00121 10011 20100 11200 11002 11201 20120 12002 01210 21120 02012 10000 00210 00110 20001 10020 00101 02011 00012 01200 20020 12102 00011 11200 10101 21101 00121 01000 02010 00002 01210 21120 02012 01102 10002 10112 11012 00002 11201 20120 02002 11102 10102 00002 01002 11012 11000 10020 11101 00200 00111 02101 11010 21000 00002 11201 20120 02002 01020 00200 12011 21102 11002 00102 00012 11112 10002 01102 00102 00002 01002 11012 11011 11210 00011 21000 01120 10100 02001 10012 11002 00002 10112 00012 00002 10200 20020 02012 11112 10002 00112 00002 10002 00002 01012 10112 10112 01002 11000 12011 10120 00011 21011 10210 00002 11111 21110 12010 01200 00020 10002 01020 00200 12011 21102 11101 11002 10100 01002 11100 10012 10000 10012 01000 00102 11121 11200 12001 21002 12120 20202 11000 10010 21010 11101 02100 11111 10201 01100 10021 01000 00012 11101 10100 20100 01001 02010 00000 01200 00000 00120 00100 10102 01200 20020 12102 00001 00211 01110 20110 01121 11101 12000 00002 01020 01200 12111 20002 12120 20202 11010 21010 02001 10201 10021 00002 11201 20120 02002 11111 21000 02000 10201 01121 10012 01101 00111 20101 01000 12111 11000 01210 11010 01020 00010 10002 11112 10002 00112 00002 10002 00200 20121 12102 11210 21021 12002 10110 02100 01021 11011 21110 11200 01002 01102 00102 00002 01002 11012 11210 21020 12002 11020 10201 12101 20002 11120 11210 12100 20002 10110 20110 02110 11211 01020 00002 10200 20020 02012 01102 00102 00002 01002 11012 11010 21010 02001 10201 10021 00002 11201 20120 12002 11011 02101 01020 11010 20001 10200 00012 10002 00102 01112 11112 10002 11021 10201 02000 20002 01020 00200 12011 21102 11110 10210 11001 20001 00121 00000 02010 01102 00111 11111 20000 10001 02011 01010 11201 11010 10021 00100 00112 00011 10111 21010 00000 12110 01000 01211 01000 01020 01001 10002 11201 20120 12002 11001 12000 00021 01111 20001 00200 00012 01200 20020 12102 11002 10102 10012 00012 10102 01001 20010 02001 00210 10121 00112 01200 20020 12102 10200 20020 02012 11112 10012 10012 11102 00002 10200 20020 12002 11011 11210 00011 21000 01120 10100 02001 10012 11111 01200 11101 21001 11121 10001 12010 01002 00101 11211 01100 20100 01121 10001 02000 10012 11112 10002 00112 00002 10002 00200 20121 12102 10111 10021 01000 00200 10100 12011 10001 20100 01102 11021 10201 02000 20002 11210 21021 12002 11112 10002 00112 00002 10002 10100 11210 01000 21111 11121 11111 02000 00012 11120 01200 02110 21012 11120 00210 02010 21012 00012 00002 01112 11102 00002 10110 21000 02000 00201 10020 10112 01102 00102 00002 01002 11012 00001 01200 10101 20101 10120 11100 12000 00002 12120 20202 11020 00210 02010 20012 11201 20121 02002 11121 00200 02011 21102 11120 00210 02010 21012 10021 10201 12011 20002 11021 10201 02000 20002 11121 00200 02011 21102 11120 00210 02010 21012 01110 20001 02000 11201 00021 10002 11120 11200 12101 21002 01102 10102 10102 01102 00012 01200 20020 12102 11112 11012 10012 00002 10002 12020 20202 11121 11200 12001 21002 10100 11210 00110 21100 10120 10010 02001 10002 01020 00200 02100 21112 11012 10012 00112 01102 11002 01210 21120 02012 00101 02010 01020 10110 21101 00200 00002 01001 12111 00121 01001 20010 00200 01002 11110 10002 10110 10002 10111 10102 10001 10102 01110 01002 01102 00102 00002 01002 11012 10210 20120 12102 11110 20000 02100 10211 00020 01002 10100 21011 02000 00200 01020 00012 11002 10102 10112 11012 00002 10200 20021 12002 01020 00200 12011 21102 00111 11111 20000 10001 02011 01010 11201 11010 10021 00100 00112 10210 20120 12102 00001 10002 00100 01002 01011 00102 01010 11102 00100 00002 01020 01200 12111 20002 01020 00200 12011 21102 11112 00102 10102 00012 00102 00100 10211 01000 20100 11021 11011 02000 00012 12020 20202 11121 11200 12001 21002 00110 00200 00000 21110 01021 01001 02010 01002 10210 20020 02012 01020 00200 12011 21102 01111 01110 10121 01100 00000 01200 11000 10001 12111 10100 00011 20000 01000 10002 11020 01200 12101 20102 01112 10112 01012 10002 00002 11121 11200 12001 21002 01200 20020 12102 01110 20000 02000 10210 00021 10002 00110 11101 12000 11000 11020 10000 00101 21110 00101 00210 10100 10002 00001 10020 01101 00201 10100 12010 10001 21000 00102 01100 01200 00011 20010 11121 00011 12000 10002 01200 20020 12102 00110 20110 02010 11201 01021 00002 10110 21100 12110 00201 10121 00102 11010 10101 21000 10000 12010 00000 11201 00000 01120 01010 10002 11201 20121 02002 01020 00200 12011 21102 10021 00201 02011 21012 10111 11111 20101 01100 02010 10101 11211 00000 00020 00100 00012 10210 20120 12102 11000 20010 02000 10211 11021 00002 01200 20020 12102 01001 21000 02100 11201 01020 00002 01020 00200 12011 21102 10001 02111 01021 01100 21111 00200 00002 10200 20021 12002 10011 20001 12001 01200 10120 00002 01001 12111 00121 01001 20010 00200 01002 11121 11200 12001 21002 11000 01000 20100 10100 02010 11110 10200 01111 01020 01000 01002 11201 20120 02002 01020 00200 12011 21102 01000 01112 11100 00112 10111 00112 00101 00002 00000 10012 11110 21110 02011 11200 00120 01002 11021 10201 02000 20002 11121 11210 02100 20012 10200 20020 02012 11211 20120 12002 12120 20202 11121 10200 12000 21012 10200 20021 12002 10111 11210 00011 21111 01121 10000 02000 00012 00101 10121 10000 01201 00010 12111 00101 20000 10102 01200 20121 02112 11000 10110 11120 10011 01100 11201 01110 01001 12000 11100 00000 21000 00100 00012 11120 01200 02110 21012 00001 21010 12111 11201 01120 00002 00101 11002 11011 11002 01000 10012 11110 00012 00000 10102 12020 20202 11121 11200 12001 21002 01002 10102 10112 01112 00002 11000 01000 20100 10100 02010 11110 10200 01111 01020 01000 01002 11201 20120 02002 11000 10110 11120 10011 01100 11201 01110 01001 12000 11100 00000 21000 00100 00012 11120 01200 02110 21012 01110 11112 10000 00102 00100 01012 11000 01002 00001 00002 10011 20001 12001 01200 10120 00002 10001 02111 01021 01100 21111 00200 00002 01011 11200 10010 20010 01020 11100 12110 01112 12120 20202 01011 10111 21010 01000 12000 01000 01211 10000 01020 00100 10002 10200 20020 02012 11121 11200 12001 21002 12120 20202 01111 11210 00001 21011 00120 00001 02000 00002 01101 21000 12101 11200 01120 00002 00102 01012 01012 11102 00002 11020 01200 12101 20102 00112 10102 11012 11002 00002 10011 21101 12011 01201 10120 00002 10200 20021 12002 00000 01102 00101 00102 11011 00112 10111 00112 01000 10002 11021 10201 02000 20002 12020 20202 11111 02100 00021 00010 21110 00201 01002 11002 01102 00012 10012 10102 00111 10021 01001 00211 01011 02110 00110 20000 00002 01020 00200 12011 21102 01110 01201 11011 20011 11120 00011 12000 10002 01112 10002 10102 00112 01012 01011 00201 10001 21011 01121 01001 12000 00002 01020 00200 12011 21102 11021 11200 12001 21002 11001 21110 12101 11200 01121 00002 00010 00010 20011 10101 02010 01011 10201 10100 10020 00001 00012 10210 20020 02012 01110 10200 11100 20110 10120 00000 02010 00012 11121 11210 02100 20012 01020 00200 12011 21102 01001 01112 10001 00102 00011 00012 11010 00002 00100 10002 01020 01200 12111 20002 01112 00012 00012 01012 11002 01112 00002 00012 01102 10002 01200 20020 12102 00200 20121 12102 11002 01002 01102 01102 10002 11211 20120 12002 12120 20202 01010 12010 10020 01101 20010 00211 00112 01010 20011 02001 10210 11020 00012 10101 01200 10010 21110 01121 10001 02000 11012 00011 11210 11001 20111 00120 11101 02100 00002 10200 20021 12002 11111 02101 01021 01010 21000 00200 10012 11111 11121 00010 11201 10001 12000 10000 20000 10012 11001 11101 10201 00000 10100 20101 11011 11120 00100 00101 12001 00001 00002 11011 10121 10100 01201 11101 12001 01011 20100 00002 11021 10201 02000 20002 11000 10010 12101 01110 10121 00111 11101 20101 10010 01210 10000 00102 01200 20020 12102 00110 20110 02010 11201 01021 00002 10111 21110 02110 11210 00020 00002 10110 21100 12110 00201 10121 00102 11010 10101 21000 10000 12010 00000 11201 00000 01120 01010 10002 01200 20121 02112 01011 11121 10000 11210 01001 12000 11000 20010 10012 11111 02010 01020 11011 21000 01200 00002 00110 11102 00011 00012 01000 00012 11100 01012 10101 00102 01200 20020 12102 01111 20101 12110 01200 10020 00102 00001 10012 00110 10012 01101 00112 01010 00112 10000 01002 10111 21110 02110 11210 00020 00002 10110 12110 01121 10001 20110 11210 01002 11111 01112 01000 00112 01110 00112 00100 00002 00001 00012 00001 01102 00110 10102 01110 10102 01111 10102 10000 00012 10111 20000 12111 11211 00120 00002 01020 00200 12011 21102 00121 01200 12101 20002 11101 11002 10100 01002 11100 10012 10000 10012 01000 00102 11020 10200 02100 21002 11010 12110 10120 11101 20010 01201 00102 10210 20020 02012 01102 10102 00102 00102 01012 10110 21000 02000 00201 10020 10112 00001 20101 02101 11210 11020 10012 10012 11112 01112 01012 00002 01110 11010 00211 10010 00101 21010 00100 11120 00010 10011 12000 10001 10002 11201 20120 02002 01020 00200 12011 21102 10102 10102 01102 01102 10012 11111 01112 01000 00112 01110 00112 00100 00002 00001 00012 01110 10200 11100 20110 10120 00000 02010 00012 11012 10012 00112 01102 11002 01012 00002 00112 01102 11012 00110 02000 11020 11011 21110 01210 00002 11100 21111 02000 11200 01120 10002 10200 20021 12002 11020 01200 12101 20102 11002 10102 00112 01102 10002 01012 00002 00112 01102 11012 10011 10021 11111 00201 10111 02011 00010 20000 01002 01020 01200 12111 20002 01110 10200 11100 20110 10120 00000 02010 00012 01200 20020 12102 00101 10210 01000 21111 00021 11100 02000 01012 11201 20120 12102 11201 20121 02002 01010 20000 12001 01201 10121 10002 11000 12010 01120 10111 20001 10200 10002 11100 02100 01021 10111 21111 01200 10002 10200 20020 02012 11121 11200 12001 21002 11211 20120 02002 10101 11211 11011 20101 01120 00000 02000 10012 01002 00102 00112 00012 10002 10210 20120 12102 11020 10200 02100 21002 00001 20101 02101 11210 11020 10012 00111 01021 01001 00211 10011 12111 10111 20000 10002 10210 20120 12102 11110 20000 02100 10211 00020 01002 11102 11102 00102 00002 10012 11021 10201 02000 20002 10210 20020 02012 01010 20011 02001 10210 11020 00012 01020 00200 12011 21102 00000 10201 00001 20111 00121 11101 02000 00002 01200 20020 12102 01200 20020 12002 11102 10102 00002 01002 11012 10210 20120 12102 11100 02111 00020 01010 20000 10210 01002 10101 12101 00021 11011 20100 00210 01012 01012 00002 00112 01102 11012 00111 10201 00100 20100 10021 11001 02100 11112 11201 20120 12102 01110 21001 02100 10211 00020 01002 01200 20020 12102 11001 11210 10011 20011 01120 11000 02100 00012 11201 20121 02002 10111 21110 02110 11210 00020 00002 10110 21100 12110 00201 10121 00102 01110 11200 11100 20110 10120 00000 12010 00002 00110 11120 11000 11201 01101 12010 10000 21000 00012 11021 10201 02000 20002 01111 11112 00000 10112 00110 00112 11001 00002 00000 10012 11002 10102 10112 11012 00002 10200 20021 12002 01020 00200 12011 21102 00101 02100 01021 11110 21111 00200 00012 00110 01012 01110 00012 01011 00112 01001 00112 10010 00002 12020 20202 11000 02101 00020 01110 20110 10210 00002 11020 00200 02100 20112 01020 01200 12111 20002 01101 02101 00021 11110 20011 01201 00002 01020 00200 12011 21102 01001 01112 10001 00102 00011 00012 11010 00002 00100 10002 10200 20021 12002 11020 01200 12101 20102 11001 10021 00011 10210 00001 12111 00011 20001 10002 01200 20020 12102 00001 02000 00020 10110 20101 10200 10012 11021 10201 02000 20002 00000 10211 01010 20110 11021 11010 02000 10012 00001 01102 00110 10112 01110 10112 01111 10102 10000 00002 01020 00200 02100 21112 10210 20120 12102 10000 02100 00021 11010 20110 10200 00002 01012 01012 00002 00002 00102 10210 20120 12102 11110 02010 00021 01110 21000 10200 00002 10200 20020 02012 01020 00200 12011 21102 00002 00112 01102 01012 10002 01102 01102 00112 10002 10002 12120 20202 01010 11020 10101 10200 00001 12000 01011 20010 10002 10200 20021 12002 00110 11101 12000 11000 11020 10000 00101 21110 00101 00210 10100 10002 00001 10012 00110 10012 01101 00112 01010 00112 10000 01002 11111 21000 02000 10201 01121 10012 10210 20120 12102 11110 21000 02000 10201 00021 01002 11020 10201 12011 21002 01200 20020 12102 01011 21100 02100 10200 01120 01012 11111 10211 10110 20100 11020 00001 02010 00012 11002 00102 10012 00012 00102 11111 02010 01020 11011 21000 01200 00002 00100 11201 10000 20100 00120 10110 12100 00002 01200 20020 12102 11111 11102 00100 01002 00101 01002 10010 00102 10110 01112 10011 21101 12011 01201 10120 00002 10200 20021 12002 11000 01020 10010 10201 01111 02000 11110 20010 00012 11210 21020 12002 11020 10201 12101 20002 11020 10200 02100 21002 00002 01012 10112 10112 01002 11000 02101 00020 01110 20110 10210 00002 11201 20121 02002 01112 00012 00012 01012 11002 11002 10102 10102 11102 00012 10200 20021 12002 01000 01211 00011 20000 11121 00011 02001 10002 01100 20110 02001 10210 11021 00002 00110 11120 11000 11201 01101 12010 10000 21000 00012 00010 02000 01020 10011 21111 11210 00002 11210 21021 12002 10210 20120 12102 11020 10200 02100 21002 11210 21020 12002 01012 01012 00002 00002 00102 11201 20121 02002 11111 21000 02000 10201 01121 10012 01200 20020 12102 01102 01102 00112 10112 10002 01020 00200 12011 21102 00001 10012 00110 10012 01101 00112 01010 00112 10000 01002 01001 11112 10000 00112 10011 10112 01010 00002 00000 00012 11001 11110 11120 01101 00100 01210 11010 10000 12110 00001 00010 20000 10000 10002 01000 01121 10001 11200 00111 12100 01101 20011 00002 00010 01200 01001 20100 11121 10011 02101 10002 00000 01210 10011 21110 11120 10111 12000 10002 10200 20021 12002 12120 20202 00001 01102 00110 10102 01110 10102 01111 10102 10000 00012 10110 21100 12110 00201 10121 00102 11011 10210 00000 20000 00020 00110 02101 10112 01020 00200 12011 21102 00001 10012 00110 10012 01101 00112 01010 00112 10000 01002 10200 20020 02012 11121 11200 12001 21002 10011 11010 20110 11000 02010 01100 11200 11110 10120 00000 01002 01200 20020 12102 11001 20111 02101 11210 11020 00012 11020 00200 02100 20112 00112 10102 11012 11002 00002 01002 00102 00112 00012 10002 01110 10111 21010 00101 12101 00010 11201 00011 00020 00010 00012 11211 20120 12002 01020 00200 12011 21102 01012 01012 00002 00002 00102 01002 11002 10012 10012 00102 11121 11200 12001 21002 01020 11200 12101 20002 01120 00200 02011 21002 11112 00102 00102 10012 10112 01020 01200 12111 20002 11002 00102 10012 00012 00102 11111 11121 11001 01201 01110 12000 00101 20000 10002 12020 20202 01110 02110 10021 00110 21001 10200 00002 01210 21120 02012 11110 01120 01001 11210 11111 12110 11101 20000 00002 11012 10002 00002 00012 10112 01020 00200 12011 21102 10102 00102 01002 11002 10002 10200 20021 12002 00101 01121 01011 00211 11011 02111 10111 20000 00012 10210 20020 02012 01110 10200 11100 20110 10120 00000 02010 00012 11021 10201 02000 20002 01102 00102 00002 01002 11012 11121 11200 12001 21002 11012 10012 00112 01102 11002 12020 20202 11121 11200 12001 21002 11001 01100 20101 00000 02010 10001 10200 01100 11020 01000 10002 01200 20020 12102 11001 10210 10010 21011 01121 10110 12000 00002 00102 01012 01012 11102 00002 01020 00200 12011 21102 11101 11002 10100 01002 11100 10012 10000 10012 01000 00102 01012 00002 00112 01102 11012 00101 10021 10101 00201 01011 02111 00110 20000 00002 11201 20120 12102 01012 01012 00002 00002 00102 01100 20110 02001 10210 11021 00002 11201 20121 02002 01010 01011 11211 00011 00010 21000 11000 10120 00110 00010 02001 10001 00002 01001 12100 00121 00111 20101 01200 00002 00001 10002 00100 01002 01011 00102 01010 11102 00100 00002 01200 20121 02112 01020 00200 12011 21102 00010 00010 20011 10101 02010 01011 10201 10100 10020 00001 00012 10200 20021 12002 00001 10200 00100 20101 11120 11101 12000 00002 11021 10201 02000 20002 01020 00200 12011 21102 00100 10211 01000 20100 11021 11011 02000 00012 11101 11002 00100 10002 10100 10102 11000 00102 00010 01002 10200 20020 02012 11121 11200 12001 21002 01002 10102 10112 01112 00002 11110 11011 21000 01100 02101 11110 01210 11111 10020 10000 00102 01112 00112 00012 01002 11002 10210 20120 12102 11020 10200 02100 21002 01000 20110 02001 10200 11020 00002 01200 20020 12102 11002 00102 00012 11112 10002 12120 20202 10001 02101 01121 01101 21011 00201 00002 10200 20021 12002 11112 00102 00102 10012 10112 11111 01210 10000 20001 00121 00000 02010 00112 01012 01012 00002 00002 00102 01110 02000 00020 01110 21000 10200 00002 01020 00200 12011 21102 00002 00112 01102 01012 10002 01102 01102 00112 10002 10002 11021 10201 02000 20002 01020 00200 12011 21102 11110 10102 10101 00012 01101 00012 00011 00102 00100 01102 00111 20011 12011 01211 00021 01002 01200 20020 12102 10102 11002 10002 11102 00012 00112 10102 11012 11002 00002 11010 21010 02001 10201 10021 00002 00100 10120 01110 01211 01011 12100 01011 20100 00002 01102 00102 00002 01002 11012 11110 11200 01000 21101 11121 01110 02000 00012 01011 00211 00000 21001 01020 00111 02001 01002 01020 00200 12011 21102 00001 10012 00110 10012 01101 00112 01010 00112 10000 01002 10200 20021 12002 11101 02000 11021 00111 21101 11200 10002 12120 20202 11020 00210 02010 20012 10200 20021 12002 01102 00102 00002 01002 11012 11121 11200 12001 21002 01102 10102 00102 00102 01012 11100 00200 10001 21000 01121 10001 12010 11002 01000 20001 02001 11201 11121 10002 11201 20120 12002 12120 20202 11010 21010 02001 10201 10021 00002 10200 20021 12002 01000 00110 20000 01010 02000 01111 11200 11111 01120 00000 00002 00010 01200 01001 20100 11121 10011 02101 10002 01111 11111 20010 01101 12001 10110 11200 11011 00020 00010 00012 11021 10201 02000 20002 11001 11120 11100 11210 11101 12101 10000 20000 10012 11020 00200 02100 20112 11211 20120 02002 10011 02100 10020 00011 20000 10201 10002 11021 10201 02000 20002 11210 21020 12002 10110 10121 00010 00211 10100 12111 01000 20001 00112 10001 10210 11000 21110 01121 11001 12000 10002 11120 11210 12100 20002 11001 01110 02011 01001 10020 10110 01001 20001 10000 01200 10010 10102 00001 20101 02101 11210 11020 10012 00110 00200 00000 20110 01020 10001 02000 10002 01101 11201 10110 20010 01121 00001 02000 10012 11111 02010 01020 11011 21000 01200 00002 11201 20120 02002 10000 20100 12010 11211 01120 00002 01200 20020 12102 01102 00102 00102 10002 00002 01020 00200 12011 21102 11020 10201 12101 20002 00112 10102 11012 11002 00002 01102 10002 01002 10102 00012 01110 10200 11100 20110 10120 00000 02010 00012 10002 10102 01112 01112 10002 00110 00200 00000 21110 01021 01001 02010 01002 01200 20121 02112 11102 10102 00002 01002 11012 10210 20120 12102 11020 10200 02100 21002 11110 00021 00001 00201 00101 02011 01010 20010 01002 01020 00200 02100 21112 11211 20120 12002 01020 00200 12011 21102 00111 01210 10001 21110 10121 11000 12000 10102 01110 02100 00021 01110 21100 10200 00002 11201 20120 02002 01012 00002 00112 01102 11012 00011 00020 01110 00201 10101 02010 00010 20000 00002 01002 10102 10112 01112 00002 11110 11121 00011 00201 10101 12011 01010 20001 00012 11021 10201 02000 20002 01020 01200 12111 20002 01102 00102 00002 01002 11012 10210 20120 12102 10000 02100 00021 11010 20110 10200 00002 01112 10002 10102 00112 01012 00000 02000 00120 10011 21100 11210 11002 01012 01012 00002 00002 00102 01020 00200 12011 21102 11101 11002 10100 01002 11100 10012 10000 10012 01000 00102 10002 10102 01112 01112 10002 11001 20111 02000 01210 11021 00012 01200 20020 12102 10111 02000 01020 01011 21100 01201 00102 11021 10201 02000 20002 01102 00102 00002 01002 11012 11201 20120 12002 11012 10012 00112 01102 11002 12020 20202 00111 10021 01001 00211 01011 02110 00110 20000 00002 01020 00200 12011 21102 11120 01200 02110 21012 01020 11200 12101 20002 01012 00002 00112 01102 11012 10002 10102 01112 01112 10002 00001 00021 10111 00201 10011 02111 10110 20000 00002 01200 20020 12102 11210 21020 12102 12020 20202 00100 20100 02010 10201 01021 00002 01200 20020 12102 11101 11020 01101 00210 10011 12110 00011 20001 00002 01101 02101 00021 11110 20011 01201 00002 01102 00102 00002 01002 11012 01020 00200 12011 21102 11101 11002 10100 01002 11100 10012 10000 10012 01000 00102 11020 10200 02100 21002 11101 12100 01120 11111 20111 11200 00002 01200 20020 12102 12120 20202 11010 20111 02101 11200 10120 00102 01010 11020 10101 10200 00001 12000 01011 20010 10002 10200 20021 12002 00110 11120 00100 11211 01001 12100 10000 20100 10012 11001 11110 11112 00110 10010 00112 10110 10100 00112 11000 00100 01012 00001 00001 00002 01102 00102 00002 01002 11012 01012 00002 00112 01102 11012 10002 10102 01112 01112 10002 11111 20101 12010 11201 00021 00012 01200 20020 12102 00001 10200 01100 21101 01021 00101 02011 00012 00110 11101 12000 11000 11020 10000 00101 21110 00101 00210 10100 10002 00001 10012 00110 10012 01101 00112 01010 00112 10000 01002 01020 00200 02100 21112 01020 00200 12011 21102 01002 10102 10112 01112 00002 12020 20202 01111 10200 00100 20000 10020 11001 02110 11112 10110 21000 02000 00201 10020 10112 10200 20020 02012 01020 00200 12011 21102 01002 10102 10112 01112 00002 11110 01120 10000 00201 10111 12000 00100 21000 00012 10200 20020 02012 10000 02100 10021 11110 21110 10200 00002 11020 01200 12101 20102 11001 10021 00011 10210 00001 12111 00011 20001 10002 11121 11200 12001 21002 10011 12100 01121 11011 21110 00200 00012 00112 10102 11012 11002 00002 11010 21010 02001 10201 10021 00002 10011 02100 10020 00011 20000 10201 10002 01000 01121 10001 11200 00111 12100 01101 20011 00002 01102 00102 00002 01002 11012 10002 10102 01112 01112 10002 11101 11111 11210 11000 00100 21010 01000 11121 01101 01010 02010 00000 10012 11011 10210 10011 21010 10121 00000 12000 00002 11011 02101 01020 11010 20001 10200 00012 11100 11010 10020 00100 11110 00210 01101 10001 02111 11101 01110 20100 00100 01002 11021 10201 02000 20002 12020 20202 00111 20011 12011 01211 00021 01002 01200 20020 12102 11100 02101 00120 01011 20100 11210 00002 10200 20020 12002 01020 00200 12011 21102 00121 01200 12101 20002 11101 11002 10100 01002 11100 10012 10000 10012 01000 00102 10002 10102 01112 01112 10002 11021 00210 02010 20012 01102 10102 00102 00102 01012 00110 11120 11000 11201 01101 12010 10000 21000 00012 00001 01102 00110 10102 01110 10102 01111 10102 10000 00012 11010 10121 00010 00201 00000 12010 00000 20010 10112 01020 00200 02100 21112 10002 10102 01112 01112 10002 01111 01111 12010 00111 01121 11001 01011 21011 01000 00200 00100 10012 10200 20020 02012 10111 21101 12010 11200 10020 00012 10110 12110 01121 10001 20110 11210 01002 01102 00102 00002 01002 11012 01012 00002 00112 01102 11012 11020 10200 02100 21002 00100 01000 21010 01100 02011 10100 10211 01010 01020 00010 01002 11201 20120 02002 10000 20100 12010 11211 01120 00002 01200 20020 12102 01110 20000 02000 10210 00021 10002 11211 20120 02002 01111 11010 01120 10000 01100 01211 11110 00100 02101 01011 01000 20001 00000 00002 10200 20021 12002 00110 11101 12000 11000 11020 10000 00101 21110 00101 00210 10100 10002 00001 10012 00110 10012 01101 00112 01010 00112 10000 01002 01102 00102 00002 01002 11012 11110 20000 02100 10211 00020 01002 00200 20121 12102 11002 01002 01102 01102 10002 01200 20020 12102 10102 11002 10002 11102 00012 01010 02000 01020 00011 21000 11201 11002 10011 01210 01001 20000 11120 00010 12011 00002 00010 02000 01020 10011 21111 11210 00002 01012 00002 00112 01102 11012 11000 10020 11101 00200 00111 02101 11010 21000 00002 01020 00200 12011 21102 11101 11002 10100 01002 11100 10012 10000 10012 01000 00102 11020 10200 02100 21002 11211 20120 02002 11111 10121 00000 01201 00111 12011 00011 20010 00002 10012 00002 01112 11102 10002 10200 20020 02012 11121 11200 12001 21002 11021 00210 02010 20012 01111 01021 01100 00200 11001 12111 10101 20000 01002 01200 20020 12102 11100 11100 20001 00110 02100 10010 01211 11000 00120 00000 00102 01010 20000 12001 01201 10121 10002 00101 01121 01011 00211 11011 02111 10111 20000 00012 00110 10002 11011 11102 01011 01112 11101 00012 00010 00002 11011 10210 00000 20000 00020 00110 02101 10112 10101 11200 11011 21100 01120 10000 02000 10012 01010 20000 12001 01201 10121 10002 11120 11200 12100 20102 01110 11200 10010 20010 00120 00000 02001 01002 01100 01102 00001 10102 00000 10102 11101 10002 00010 00012 01001 12111 00121 01001 20010 00200 01002 11021 10201 02000 20002 12020 20202 00011 11002 10000 01002 11001 01102 11111 01102 00000 10002 11020 01200 12101 20102 00010 01200 00101 21000 10121 11110 12000 00102 11201 20121 02002 00110 11120 11000 11201 01101 12010 10000 21000 00012 01002 00012 00112 01102 11002 01112 00112 00012 01002 00102 11021 10201 02000 20002 01110 20001 02000 10211 00020 01002 11121 00201 12000 20002 01020 00200 12011 21102 00100 11020 10001 00210 00111 12100 01011 20100 00002 10210 20120 12102 10000 02100 00021 11010 20110 10200 00002 01020 00200 02100 21112 01012 00002 00112 01102 11012 10002 10102 01112 01112 10002 01020 00200 12011 21102 00000 01200 10101 21101 10121 01110 12010 00102 11021 00210 02010 20012 11201 20120 12102 11021 10201 02000 20002 10210 20120 12102 01102 10102 10102 00102 01012 11002 01102 00012 10012 10102 00111 00002 01011 01002 01011 11102 01000 11102 10011 00002 11211 20120 02002 11100 21011 12010 11200 01020 00002 11001 10002 10101 00102 10110 01112 11010 11112 00001 10002 01012 00002 00112 01102 11012 11002 11102 10012 00012 10102 11201 20120 12102 11020 10201 12101 20002 11111 02000 00021 00011 21110 11201 00002 01210 21120 02012 00101 20010 02010 00201 00120 00112 11121 11200 12001 21002 11121 01210 02010 20012 11001 01010 20101 00100 02011 00000 11200 10000 10120 00101 01002 01020 00200 12011 21102 11112 01002 01112 10002 00012 11010 11121 00100 01200 11000 12101 10010 20100 10002 11121 11200 12001 21002 11001 00210 00001 20010 01120 11011 12110 11002 10201 20121 12002 11021 00210 02010 20012 10200 20020 02012 11110 21000 02000 10201 00021 01002 00200 20121 12102 01000 20100 02001 10210 01020 00002 11102 01002 01112 10112 00002 12020 20202 11121 11200 12001 21002 10011 11111 20000 00100 02000 01001 11211 10100 00020 00000 00012 00102 00102 01002 01002 00002 12020 20202 11110 21000 02000 10201 00021 01002 11002 01102 00012 10012 10102 11210 21020 12002 00100 10111 21100 00000 12010 01100 01211 10110 01020 00100 10002 01020 00200 02100 21112 10210 20120 12102 10002 10102 01112 01112 10002 01111 01021 10010 00200 10001 12000 00101 21001 01002 01200 20020 12102 01002 00012 00112 01102 11002 11021 10201 02000 20002 01102 00102 00002 01002 11012 11121 11200 12001 21002 01020 00200 12011 21102 00120 00211 12010 20012 01200 20020 12102 11020 01200 12101 20102 11001 01121 01101 10210 10000 12101 00000 20101 01002 12020 20202 10000 21010 12110 11201 01120 01002 01012 01012 11102 00102 00012 01020 00200 12011 21102 11002 11102 10112 00012 00002 10200 20021 12002 01020 00200 12011 21102 11012 10102 10112 00102 10002 01012 00002 00112 01102 11012 11002 01002 01102 01102 10002 01200 20020 12102 01002 01002 00112 10012 00002 01210 21120 02012 11111 00210 00000 21001 00121 00100 12010 00002 01020 00200 02100 21112 01012 00002 00112 01102 11012 01020 00200 02000 20002 11110 02111 01020 11011 20110 11200 01002 00210 21120 12002 01102 00102 00002 01002 11012 11021 00210 12111 20102 11020 10200 02100 21002 01002 00002 00102 00102 00002 10200 20021 12002 11010 11211 00110 21000 10120 00010 02001 10002 11110 12010 10121 00111 21001 11200 10002 12020 20202 11002 00102 00012 11112 10002 01102 00102 00002 01002 11012 01112 10002 10102 00112 01012 11121 11200 12001 21002 00102 01002 01012 01012 10102 01020 00200 12011 21102 11101 11002 10100 01002 11100 10012 10000 10012 01000 00102 10002 10102 01112 01112 10002 01020 00200 12011 21102 00112 10102 11012 11002 00002 00000 01200 10101 21101 10121 01110 12010 00102 11201 20120 02002 01011 11102 01100 11102 11000 10112 11101 00012 00000 00102 01020 00200 02100 21112 01001 12111 00121 01001 20010 00200 01002 11021 10201 02000 20002 12020 20202 11020 10200 02100 21002 01020 00200 12011 21102 00102 00102 10112 10012 00102 11201 20120 02002 11011 12000 01121 00011 21100 00200 00012 01012 00002 00112 01102 11012 11011 00211 00000 20001 01020 00111 02101 01002 11201 20120 12102 11000 11112 01100 00002 10110 01112 10111 00002 00000 10012 01020 00200 02100 21112 10210 20120 12102 01111 00211 11100 21010 11020 00001 02000 01002 01200 20020 12102 01110 21011 02010 10210 00020 00012 12120 20202 01011 21010 12001 01200 10121 00102 11201 20120 02002 01020 00200 12011 21102 01010 11020 10101 10200 00001 12000 01011 20010 10002 01111 02011 01021 11011 21000 01200 10002 11021 10201 02000 20002 10200 20020 02012 11112 10002 00112 00002 10002 11002 01102 00012 10012 10102 00012 00012 01112 11102 10002 00111 00002 01011 01002 01011 11102 01000 11102 10011 00002 11112 00112 10112 01002 00012 00010 02000 01020 10011 21111 11210 00002 11120 00210 02010 21012 00102 10102 11002 11002 00002 01112 00012 00012 01012 11002 10200 20020 02012 11201 20120 12002 00111 10020 01011 00201 10111 02011 00010 20000 10002 01200 20020 12102 11001 02010 00020 10110 20011 10200 00012 00001 20101 02101 11210 11020 10012 11012 00102 10012 11102 00012 10200 20021 12002 11020 01200 12101 20102 11110 10102 10101 00012 01101 00012 00011 00102 00100 01102 11021 10201 02000 20002 01200 20020 12102 01101 00201 01010 21111 10021 01101 02000 01012 10111 11201 00010 21101 00121 10100 02001 00002 01000 10120 00101 01211 11110 12101 01001 20000 00102 10200 20021 12002 01020 00200 12011 21102 11002 00002 10012 11012 00002 00100 01112 10100 10112 11101 10112 11001 10002 00000 00012 10200 20020 02012 11111 01020 10110 00201 01001 12000 10101 21010 01002 10210 20120 12102 10101 00200 11100 21101 11020 10101 02000 00002 12120 20202 11020 00210 02010 20012 00102 01012 01012 11102 00002 10101 11121 00000 11210 00101 12100 00000 20110 10012 10101 00210 00100 21001 11021 00001 02011 10012 11021 10201 02000 20002 01020 00200 12011 21102 00002 00112 01102 01012 10002 01102 01102 00112 10002 10002 11112 10002 00112 00002 10002 11000 02100 00121 00011 21011 11201 00002 01020 00200 12011 21102 11002 11102 10112 10012 00002 01002 01002 00012 10012 00102 11211 20120 12002 01020 00200 12011 21102 10111 11201 11011 20101 00120 10000 02000 00002 10100 10110 12001 01000 10121 11010 00111 21100 10100 11200 01000 11002 11121 01210 02010 20012 01020 00200 12011 21102 01011 21010 12001 01200 10121 00102 11201 20120 12002 00101 10021 00011 00211 11011 02110 10110 20000 00002 10210 20120 12102 11101 11002 00110 10002 10100 11102 11000 01102 00010 00002 01020 00200 12011 21102 11101 11002 10100 01002 11100 10012 10000 10012 01000 00102 01200 20020 12102 01102 00102 00102 10002 01002 12120 20202 11100 02010 00120 01111 21010 11210 00002 11110 10100 20000 00001 02101 11100 01211 00110 00120 00000 10102 11201 20120 02002 11011 12101 11021 01001 20110 00200 01012 11021 10201 02000 20002 01200 20020 12102 11111 21000 12011 00200 01020 00012 01001 12111 00121 01001 20010 00200 01002 01200 20020 12102 11002 10102 00112 01102 10002 01000 20001 02001 11201 11121 10002 11000 11000 20100 10010 12010 11100 11200 01111 01121 00000 01002 11211 20120 12002 01020 11200 12101 20002 11211 20120 12002 01012 00002 00112 01102 11012 10002 10102 01112 01112 10002 11110 01002 00100 11002 10111 11102 11011 10102 00000 00002 10200 20121 12102 11112 10002 00112 00002 10002 00200 20121 12102 11000 10111 20111 01001 12001 01100 11210 10110 00021 00100 10012 01101 11020 11000 10200 11101 12101 10001 21000 00002 01012 01012 00002 00002 00102 01020 01200 12111 20002 11110 21001 02100 11201 01120 00002 01100 01112 00000 10112 00101 10112 10001 10002 00010 00012 11201 20120 02002 11111 12100 01021 01001 21110 00200 00002 00011 21000 12110 00201 00020 00002 00100 11201 10000 20100 00120 10110 12100 00002 01020 00200 02100 21112 10200 20121 12102 11112 10002 00112 00002 10002 00200 20121 12102 01100 10101 11200 10100 00011 20010 10000 01120 01010 10000 02000 10011 10012 01112 00012 00012 01012 11002 01102 00002 00112 10012 00002 11021 10201 02000 20002 01020 00200 12011 21102 01011 21010 12001 01200 10121 00102 01200 20020 12102 11211 20120 12002 01112 11102 10112 00002 00012 10000 01210 11011 21110 11121 11011 12000 10002 11211 20120 12002 10200 20121 12102 11120 11210 12100 20002 11011 10210 00000 20000 00020 00110 02101 10112 11000 11121 00100 11201 11001 12001 10000 20000 10012 01002 00012 00112 01102 11002 01001 12111 00121 01001 20010 00200 01002 11201 20120 12002 11102 10002 10002 01102 10002 10210 20020 02012 01112 00012 00012 01012 11002 10200 20121 12102 11120 11200 12101 21002 11001 01210 10100 20111 00120 01100 02000 00012 11100 02010 00020 01110 21010 10210 00002 12120 20202 11000 02101 00121 01011 20001 11201 01002 10200 20021 12002 01102 01002 00112 10102 10002 10201 20020 12102 11001 11200 11110 21010 01121 10100 02000 00012 11021 10201 02000 20002 10021 11200 02011 20002 10000 01210 11011 21110 11121 11011 12000 10002 11021 10201 02000 20002 11002 01002 01102 01102 10002 01002 00012 00112 01102 11002 11211 20120 12002 12120 20202 01100 10101 11200 10100 00001 20010 10000 00120 01010 10001 02000 10011 10002 00111 11102 10001 10112 11100 10112 01110 00102 00010 00002 10210 20120 12102 11002 01102 00012 10012 10102 11112 10102 01102 00112 00002 00012 00012 01112 11102 10002 10101 11200 11011 21100 01120 10000 02000 10012 12120 20202 00111 20110 02010 01201 00021 00002 01020 01200 12111 20002 01020 00200 12011 21102 11001 11101 10201 00000 10100 20101 11011 11120 00100 00101 12001 00001 00002 10001 10121 01100 01211 10011 12111 00111 20001 00002 10210 20120 12102 11002 01102 00012 10012 10102 11210 21020 12002 00111 12101 10121 10101 21101 10200 00002 01200 20020 12102 00110 00200 00010 20110 10121 10010 12100 00102 01020 00200 12011 21102 11000 10010 12101 01110 10121 00111 11101 20101 10010 01210 10000 00102 10021 10201 12011 20002 11110 10002 00110 00002 10111 10102 11001 10102 00000 01002 11012 10002 00002 00012 10112 01112 00012 00012 01012 11002 11021 10201 02000 20002 00001 20101 02101 11210 11020 10012 00111 12101 10121 10101 21101 10200 00002 01200 20020 12102 00110 00200 00010 20110 10121 10010 12100 00102 01012 00002 00112 01102 11012 01121 10210 12000 20012 00200 20121 12102 11020 01200 12101 20102 00102 00102 01102 11102 10012 11002 00102 00012 11112 10002 10200 20021 12002 10100 11121 00110 11210 00001 12101 11000 20100 00012 01002 00012 00112 01102 11002 10021 10201 12011 20002 10210 20120 12102 11002 11002 10012 10112 00002 00101 01121 10010 00201 00001 12111 10100 20001 01012 11021 00210 02010 20012 10201 20121 12002 01112 00012 00012 01012 11002 11110 11102 01101 11002 01101 01112 00101 00112 00010 00002 01111 12100 00020 01011 21100 10200 00012 11110 21000 02000 10201 00021 01002 11002 01102 00012 10012 10102 00011 10021 01101 00211 10011 02110 00010 20000 00002 01102 10102 00102 00102 01012 01102 00102 00002 01002 11012 10210 20120 12102 01110 21010 02101 00200 01020 01112 00200 20121 12102 11201 20121 02002 01020 00200 12011 21102 01121 01210 12100 20102 01111 12000 01020 00010 20110 01211 01112 11101 02011 00020 10011 20001 01210 01002 01200 20020 12102 00111 00201 01101 20101 11120 10001 12100 11002 01020 00200 12011 21102 00102 00102 01002 01002 00002 01121 11210 12000 20002 11101 12110 00021 00010 21000 11201 01012 01102 00102 00002 01002 11012 11121 11200 12001 21002 00001 11200 01011 21110 01120 11100 02000 00012 01010 20001 02001 11201 11121 10002 01101 20000 12001 11210 01120 00002 11002 11002 10012 10112 00002 10210 20120 12102 01200 20020 12002 11021 00210 02010 20012 01112 10112 01012 10002 00002 11201 20121 02002 11011 12101 01121 00011 20000 00210 10012 10201 20020 12102 11021 10201 02000 20002 10210 20120 12102 10102 01102 01112 01012 10102 11120 00210 02010 21012 11021 00210 02010 20012 01200 20020 12102 01010 02000 00121 00011 21001 11200 11002 diff --git a/bifid-ciphers.ipynb b/bifid-ciphers.ipynb index ad0906d..1a1fa9c 100644 --- a/bifid-ciphers.ipynb +++ b/bifid-ciphers.ipynb @@ -619,6 +619,28 @@ "bifid_encipher(\"indiajelly\", 'iguana')" ] }, + { + "cell_type": "code", + "execution_count": 166, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "'ibidonhprm'" + ] + }, + "execution_count": 166, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "bifid_encipher(\"indiajelly\", 'iguana', period=0)" + ] + }, { "cell_type": "code", "execution_count": 140, diff --git a/cipherbreak.py b/cipherbreak.py index 0ca4606..f1ab58e 100644 --- a/cipherbreak.py +++ b/cipherbreak.py @@ -569,7 +569,7 @@ def hill_break_worker(message, matrix, fitness): fit, sanitise(plaintext)[:50])) return matrix, fit -def bifid_break_mp(message, wordlist=keywords, fitness=Pletters, +def bifid_break_mp(message, wordlist=keywords, fitness=Pletters, max_period=10, number_of_solutions=1, chunksize=500): """Breaks a keyword substitution cipher using a dictionary and frequency analysis @@ -577,18 +577,19 @@ def bifid_break_mp(message, wordlist=keywords, fitness=Pletters, >>> bifid_break_mp(bifid_encipher('this is a test message for the ' \ 'keyword decipherment', 'elephant', wrap_alphabet=KeywordWrapAlphabet.from_last), \ wordlist=['cat', 'elephant', 'kangaroo']) # doctest: +ELLIPSIS - (('elephant', ), -52.834575011...) + (('elephant', , 0), -52.834575011...) >>> bifid_break_mp(bifid_encipher('this is a test message for the ' \ 'keyword decipherment', 'elephant', wrap_alphabet=KeywordWrapAlphabet.from_last), \ wordlist=['cat', 'elephant', 'kangaroo'], \ number_of_solutions=2) # doctest: +ELLIPSIS, +NORMALIZE_WHITESPACE - [(('elephant', ), -52.834575011...), - (('elephant', ), -52.834575011...)] + [(('elephant', , 0), -52.834575011...), + (('elephant', , 0), -52.834575011...)] """ with Pool() as pool: - helper_args = [(message, word, wrap, fitness) + helper_args = [(message, word, wrap, period, fitness) for word in wordlist - for wrap in KeywordWrapAlphabet] + for wrap in KeywordWrapAlphabet + for period in range(max_period+1)] # Gotcha: the helper function here needs to be defined at the top level # (limitation of Pool.starmap) breaks = pool.starmap(bifid_break_worker, helper_args, chunksize) @@ -597,13 +598,13 @@ def bifid_break_mp(message, wordlist=keywords, fitness=Pletters, else: return sorted(breaks, key=lambda k: k[1], reverse=True)[:number_of_solutions] -def bifid_break_worker(message, keyword, wrap_alphabet, fitness): - plaintext = bifid_decipher(message, keyword, wrap_alphabet) +def bifid_break_worker(message, keyword, wrap_alphabet, period, fitness): + plaintext = bifid_decipher(message, keyword, wrap_alphabet, period=period) fit = fitness(plaintext) logger.debug('Keyword break attempt using key {0} (wrap={1}) gives fit of ' '{2} and decrypt starting: {3}'.format(keyword, wrap_alphabet, fit, sanitise(plaintext)[:50])) - return (keyword, wrap_alphabet), fit + return (keyword, wrap_alphabet, period), fit def pocket_enigma_break_by_crib(message, wheel_spec, crib, crib_position):