Resigned
[cipher-training.git] / 2014-challenge4.ipynb
1 {
2 "metadata": {
3 "name": "",
4 "signature": "sha256:85b017d44c4150025cec1993a3ad84bbb01961530ccda02157c917ba9e7b9019"
5 },
6 "nbformat": 3,
7 "nbformat_minor": 0,
8 "worksheets": [
9 {
10 "cells": [
11 {
12 "cell_type": "code",
13 "collapsed": false,
14 "input": [
15 "import matplotlib.pyplot as plt\n",
16 "import pandas as pd\n",
17 "import collections\n",
18 "import string\n",
19 "%matplotlib inline\n",
20 "\n",
21 "from cipherbreak import *\n",
22 "\n",
23 "c4a = open('2014/4a.ciphertext').read()\n",
24 "c4b = open('2014/4b.ciphertext').read()"
25 ],
26 "language": "python",
27 "metadata": {},
28 "outputs": [],
29 "prompt_number": 1
30 },
31 {
32 "cell_type": "code",
33 "collapsed": false,
34 "input": [
35 "freqs = pd.Series(english_counts)\n",
36 "freqs.plot(kind='bar')"
37 ],
38 "language": "python",
39 "metadata": {},
40 "outputs": [
41 {
42 "metadata": {},
43 "output_type": "pyout",
44 "prompt_number": 2,
45 "text": [
46 "<matplotlib.axes.AxesSubplot at 0x7fa712b63358>"
47 ]
48 },
49 {
50 "metadata": {},
51 "output_type": "display_data",
52 "png": "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\n",
53 "text": [
54 "<matplotlib.figure.Figure at 0x7fa740323cf8>"
55 ]
56 }
57 ],
58 "prompt_number": 2
59 },
60 {
61 "cell_type": "code",
62 "collapsed": false,
63 "input": [
64 "c4bs = sanitise(c4b)\n",
65 "c4bs"
66 ],
67 "language": "python",
68 "metadata": {},
69 "outputs": [
70 {
71 "metadata": {},
72 "output_type": "pyout",
73 "prompt_number": 3,
74 "text": [
75 "'prsaoegerauiadmwehdnisnrasawuaaessrefgdosogvorbeeeaartesctdfmenuibrttlmeytumtmeuaikwhutkwerwahmnpwraeesononesebatoihacineetbrotadaktgfeesyioflttlstiiaeosvieonsrrtaupmnnoaencocnuvrsclvdrgctaiihriciaihrsduomrlemcrngleomarfhiuewhalcsasracufrawwsmehulstoaohceletmtoilsepdmumtptrslyrhhntpanwpmoadppdwbeseoassltmlpesletuncorerlclitaosvsiniifwseafortaaduyenenonnsopfhontwkoertcslyvoeiohlufoeioetsthtsbreneveaouepgieesobduorsfeercdyadutaepeadrdigseebfuoggopogalyfewsoeemdntohrebhaaesneworgnfiaulnlwadueodcotrargvuenewhiertlauilmsoniotmuinewaiuewloerstttisdrsasnussiesmerdhetryrhpnlrtereadmredebnntrnenwmoutrdosaneowomcgidciasaontiioiascesissupcrmoybrineyweelaylewtyrtilhsto'"
76 ]
77 }
78 ],
79 "prompt_number": 3
80 },
81 {
82 "cell_type": "code",
83 "collapsed": false,
84 "input": [
85 "key_a, score = keyword_break_mp(c4a)\n",
86 "key_a, score"
87 ],
88 "language": "python",
89 "metadata": {},
90 "outputs": [
91 {
92 "metadata": {},
93 "output_type": "pyout",
94 "prompt_number": 4,
95 "text": [
96 "(('stern', <KeywordWrapAlphabet.from_largest: 3>), -830.5838133421847)"
97 ]
98 }
99 ],
100 "prompt_number": 4
101 },
102 {
103 "cell_type": "code",
104 "collapsed": false,
105 "input": [
106 "print(' '.join(segment(keyword_decipher(sanitise(c4a), key_a[0], key_a[1]))))"
107 ],
108 "language": "python",
109 "metadata": {},
110 "outputs": [
111 {
112 "output_type": "stream",
113 "stream": "stdout",
114 "text": [
115 "harry we completed the survey and you are not going to believe what we found behind the false bulkhead in the stern there was a large pumping station connected to a number of sea facing outlets it looks like a scuttling valve system similar to the ones used on u boats in world war two icant understand why they would goto so much effort when they could have scuttled her at anytime with a small quantity of plastic explosive the team back at nsa have run some analytics on the remaining text files we extracted from the servers onboard these ciphers are going to be pretty hard to crack the attached report has frequency analysis matching usual english text so we can assume that the sender was a native speaker did you have any thoughts on what the nautilus system might have been or what it was for\n"
116 ]
117 }
118 ],
119 "prompt_number": 5
120 },
121 {
122 "cell_type": "code",
123 "collapsed": false,
124 "input": [
125 "key_b, score = column_transposition_break_mp(c4bs)\n",
126 "key_b, score"
127 ],
128 "language": "python",
129 "metadata": {},
130 "outputs": [
131 {
132 "metadata": {},
133 "output_type": "pyout",
134 "prompt_number": 7,
135 "text": [
136 "(((6, 0, 1, 7, 9, 4, 2, 3, 5, 8, 10), False, True), -1777.161911681522)"
137 ]
138 }
139 ],
140 "prompt_number": 7
141 },
142 {
143 "cell_type": "code",
144 "collapsed": false,
145 "input": [
146 "print(' '.join(segment(sanitise(column_transposition_decipher(sanitise(c4bs), key_b[0], key_b[1], key_b[2])))))"
147 ],
148 "language": "python",
149 "metadata": {},
150 "outputs": [
151 {
152 "output_type": "stream",
153 "stream": "stdout",
154 "text": [
155 "rar rrc tee eat flen var rire epymeslntnkeeeeepbln suce lnrsdreowaeyahsdaebt ture t be sonr is nu ahl drool ciano it vs ref ytnlowmesnhtbuoosbys ghuoaeywmoaaiarnvimo art ttt plnas yfcutuuadgserarriuii yaro i iue ted as an thn nc do etc dcr mla oop pdt coeehsfseodioobgdgt oeser dns do pyyeewdemekhnhtyirel roe hfs mmnpsutwuptlhodyrgw row a en its re tdg is nw rna or uuup eia foa or ilac wait a wmo san olobprugpehnuvltwdsh me acic wrp in so srm wa be gti muth ch smc elp seri row o on eeee a dead nii earl dmos colla ms fed laws or et nos idge cue mha a elias eos eoc a ufo ent hsw tue ent mn irl tai eg tim twsnklsucgaerswolrn blrvfenyergstsoeafeu am lrm prnn i are to wage f miao ios is a chul wultuhdstifdorhtabd doe hwl rio at strn rcts ieoussvebtkreettvpnc imf as hss we peso ntvieifaegmaioeuuose new e as me i\n"
156 ]
157 }
158 ],
159 "prompt_number": 8
160 },
161 {
162 "cell_type": "code",
163 "collapsed": false,
164 "input": [
165 "key_b, score = column_transposition_break_mp(c4bs, fitness=Ptrigrams)\n",
166 "key_b, score"
167 ],
168 "language": "python",
169 "metadata": {},
170 "outputs": [
171 {
172 "metadata": {},
173 "output_type": "pyout",
174 "prompt_number": 9,
175 "text": [
176 "(((4, 8, 0, 6, 9, 3, 1, 2, 5, 7, 10), False, True), -2823.7851213306785)"
177 ]
178 }
179 ],
180 "prompt_number": 9
181 },
182 {
183 "cell_type": "code",
184 "collapsed": false,
185 "input": [
186 "print(' '.join(segment(sanitise(column_transposition_decipher(sanitise(c4bs), key_b[0], key_b[1], key_b[2])))))"
187 ],
188 "language": "python",
189 "metadata": {},
190 "outputs": [
191 {
192 "output_type": "stream",
193 "stream": "stdout",
194 "text": [
195 "sda ebt ture t be sonr is nu ahl drool ciano it vs ref ytnlowmesnhtbuoosbys ghuoaeywmoaaiarnvimo art ttt plnas yfcutuuadgserarriuii yaro i iue ted as an thn nc do etc dcr mla oop pdt coeehsfseodioobgdgt oeser dns do pyyeewdemekhnhtyirel roe hfs mmnpsutwuptlhodyrgw row a en its re tdg is nwp in so srm wa be gti muth ch smc elp seri row o on eeee a dead nii earl dmos coll rna or uuup eia foa or ilac wait a wmo san olobprugpehnuvltwdsh meac icw rams fed laws or et nos idge cue mha a elias eos eoc a ufo ent hsw tue ent mn irl tai eg tim twsnklsucgaerswolrn blrvfenyergstsoeafeu am lrm prnn i are tra rrr c tee eat flen var rireepymeslntnkeeeee pblnsucelnrsdreowaey a how age f miao ios is a chul wultuhdstifdorhtabd doe hwl rio at strn rcts ieoussvebtkreettvpnc imf as hss we peso ntvieifaegmaioeuuose new e as me i\n"
196 ]
197 }
198 ],
199 "prompt_number": 10
200 },
201 {
202 "cell_type": "code",
203 "collapsed": false,
204 "input": [
205 "freqs_4b = pd.Series(collections.Counter([l.lower() for l in c4b if l in string.ascii_letters]))\n",
206 "freqs_4b.plot(kind='bar')"
207 ],
208 "language": "python",
209 "metadata": {},
210 "outputs": [
211 {
212 "metadata": {},
213 "output_type": "pyout",
214 "prompt_number": 11,
215 "text": [
216 "<matplotlib.axes.AxesSubplot at 0x7fe3606b8400>"
217 ]
218 },
219 {
220 "metadata": {},
221 "output_type": "display_data",
222 "png": "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\n",
223 "text": [
224 "<matplotlib.figure.Figure at 0x7fe35d50f550>"
225 ]
226 }
227 ],
228 "prompt_number": 11
229 },
230 {
231 "cell_type": "code",
232 "collapsed": false,
233 "input": [
234 "railfence_break(c4bs)"
235 ],
236 "language": "python",
237 "metadata": {},
238 "outputs": [
239 {
240 "metadata": {},
241 "output_type": "pyout",
242 "prompt_number": 6,
243 "text": [
244 "(5, -1581.9784460662272)"
245 ]
246 }
247 ],
248 "prompt_number": 6
249 },
250 {
251 "cell_type": "code",
252 "collapsed": false,
253 "input": [
254 "' '.join(segment(railfence_decipher(c4bs, 5)))"
255 ],
256 "language": "python",
257 "metadata": {},
258 "outputs": [
259 {
260 "metadata": {},
261 "output_type": "pyout",
262 "prompt_number": 7,
263 "text": [
264 "'phase four the decks were cleared by two am and the mounting plates were prepared and measured mounting points were assembled by four am though owing to the approaching dawn deployment of seabird was postponed and we embarked onstage two of seahorse assembly with camouflage plates installed we set to cruising in case of air or sea surveillance following standard routes to avoid suspicion monitoring of airwaves gave no cause for concern but we have raised security levels and are using a column transposition cipher for this communication with keyword seabird future comms will relyon even more security tonight will be used for more sea trials of the nautilus system while the assembly crew rest and the survey team carryout further mapping we will resume the seahorse build at dusk tomorrow'"
265 ]
266 }
267 ],
268 "prompt_number": 7
269 },
270 {
271 "cell_type": "code",
272 "collapsed": false,
273 "input": [],
274 "language": "python",
275 "metadata": {},
276 "outputs": []
277 }
278 ],
279 "metadata": {}
280 }
281 ]
282 }