d1f240b1e68e7bf320121b730619d41d7eb52a29
[cipher-tools.git] / 2014 / 2014-challenge4.ipynb
1 {
2 "cells": [
3 {
4 "cell_type": "code",
5 "execution_count": 1,
6 "metadata": {
7 "collapsed": false
8 },
9 "outputs": [],
10 "source": [
11 "import os,sys,inspect\n",
12 "currentdir = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe())))\n",
13 "parentdir = os.path.dirname(currentdir)\n",
14 "sys.path.insert(0,parentdir) \n",
15 "\n",
16 "import matplotlib.pyplot as plt\n",
17 "import pandas as pd\n",
18 "import collections\n",
19 "import string\n",
20 "%matplotlib inline\n",
21 "\n",
22 "from cipherbreak import *\n",
23 "\n",
24 "c4a = open('4a.ciphertext').read()\n",
25 "c4b = open('4b.ciphertext').read()"
26 ]
27 },
28 {
29 "cell_type": "code",
30 "execution_count": 2,
31 "metadata": {
32 "collapsed": false
33 },
34 "outputs": [
35 {
36 "data": {
37 "text/plain": [
38 "<matplotlib.axes._subplots.AxesSubplot at 0x7f775bffe668>"
39 ]
40 },
41 "execution_count": 2,
42 "metadata": {},
43 "output_type": "execute_result"
44 },
45 {
46 "data": {
47 "image/png": "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\n",
48 "text/plain": [
49 "<matplotlib.figure.Figure at 0x7f775bfe5f28>"
50 ]
51 },
52 "metadata": {},
53 "output_type": "display_data"
54 }
55 ],
56 "source": [
57 "freqs = pd.Series(english_counts)\n",
58 "freqs.plot(kind='bar')"
59 ]
60 },
61 {
62 "cell_type": "code",
63 "execution_count": 3,
64 "metadata": {
65 "collapsed": false
66 },
67 "outputs": [
68 {
69 "data": {
70 "text/plain": [
71 "'prsaoegerauiadmwehdnisnrasawuaaessrefgdosogvorbeeeaartesctdfmenuibrttlmeytumtmeuaikwhutkwerwahmnpwraeesononesebatoihacineetbrotadaktgfeesyioflttlstiiaeosvieonsrrtaupmnnoaencocnuvrsclvdrgctaiihriciaihrsduomrlemcrngleomarfhiuewhalcsasracufrawwsmehulstoaohceletmtoilsepdmumtptrslyrhhntpanwpmoadppdwbeseoassltmlpesletuncorerlclitaosvsiniifwseafortaaduyenenonnsopfhontwkoertcslyvoeiohlufoeioetsthtsbreneveaouepgieesobduorsfeercdyadutaepeadrdigseebfuoggopogalyfewsoeemdntohrebhaaesneworgnfiaulnlwadueodcotrargvuenewhiertlauilmsoniotmuinewaiuewloerstttisdrsasnussiesmerdhetryrhpnlrtereadmredebnntrnenwmoutrdosaneowomcgidciasaontiioiascesissupcrmoybrineyweelaylewtyrtilhsto'"
72 ]
73 },
74 "execution_count": 3,
75 "metadata": {},
76 "output_type": "execute_result"
77 }
78 ],
79 "source": [
80 "c4bs = sanitise(c4b)\n",
81 "c4bs"
82 ]
83 },
84 {
85 "cell_type": "code",
86 "execution_count": 4,
87 "metadata": {
88 "collapsed": false
89 },
90 "outputs": [
91 {
92 "data": {
93 "text/plain": [
94 "(('stern', <KeywordWrapAlphabet.from_largest: 3>), -830.5838133421847)"
95 ]
96 },
97 "execution_count": 4,
98 "metadata": {},
99 "output_type": "execute_result"
100 }
101 ],
102 "source": [
103 "key_a, score = keyword_break_mp(c4a)\n",
104 "key_a, score"
105 ]
106 },
107 {
108 "cell_type": "code",
109 "execution_count": 5,
110 "metadata": {
111 "collapsed": false
112 },
113 "outputs": [
114 {
115 "name": "stdout",
116 "output_type": "stream",
117 "text": [
118 "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"
119 ]
120 }
121 ],
122 "source": [
123 "print(' '.join(segment(keyword_decipher(sanitise(c4a), key_a[0], key_a[1]))))"
124 ]
125 },
126 {
127 "cell_type": "code",
128 "execution_count": 6,
129 "metadata": {
130 "collapsed": false
131 },
132 "outputs": [
133 {
134 "data": {
135 "text/plain": [
136 "(((6, 0, 1, 7, 9, 4, 2, 3, 5, 8, 10), False, True), -1777.161911681522)"
137 ]
138 },
139 "execution_count": 6,
140 "metadata": {},
141 "output_type": "execute_result"
142 }
143 ],
144 "source": [
145 "key_b, score = column_transposition_break_mp(c4bs)\n",
146 "key_b, score"
147 ]
148 },
149 {
150 "cell_type": "code",
151 "execution_count": 8,
152 "metadata": {
153 "collapsed": false
154 },
155 "outputs": [
156 {
157 "name": "stdout",
158 "output_type": "stream",
159 "text": [
160 "et et mlpdshgnbralwrrauiur tep as gsl di ocpedacnscbtsesuotut ira la lee a so at dy de og is as tavrtdeiioalkoducrhe hom tein oarscnegigctuimetyfo so rice lite her a aire iue leer dad tom sub rg mihm it yfflvwhetamioucuer to seo e oleh sri cu fig in ddy lea log ten urs site oawioheikttpohsmpps wlsosinrndshstgverll muut has ra erupt it lit smt mck is yn lace trw a bfi awrr pm eere i uunet or oe wfi a gary ws nsw lal dsb aveo smee mlr hive essor yim eee a osmer n no amf nrad hep no do ie re hywsunroffbnwrretttg hn tear po amd in peet gh au out ale air di serna sue eu now nwyopebyegheplnmshew van me on o an aol w own nbae irc mateo de nubs odys a usoe eau pre e on n west ptbnrenlerrdiacswsoa a dwl to foo ea cob hoc erp rr uses in egf st fast hurn hterneoavcfotsaeocrd int cwo a is y at it wwsncauwsdsoseldlkdf mm levu norm ect\n"
161 ]
162 }
163 ],
164 "source": [
165 "print(' '.join(segment(sanitise(column_transposition_decipher(sanitise(c4bs), key_b[0], \n",
166 " fillcolumnwise=key_b[1], \n",
167 " emptycolumnwise=key_b[2])))))"
168 ]
169 },
170 {
171 "cell_type": "code",
172 "execution_count": 9,
173 "metadata": {
174 "collapsed": false
175 },
176 "outputs": [
177 {
178 "data": {
179 "text/plain": [
180 "(((4, 8, 0, 6, 9, 3, 1, 2, 5, 7, 10), False, True), -2823.7851213306785)"
181 ]
182 },
183 "execution_count": 9,
184 "metadata": {},
185 "output_type": "execute_result"
186 }
187 ],
188 "source": [
189 "key_b, score = column_transposition_break_mp(c4bs, fitness=Ptrigrams)\n",
190 "key_b, score"
191 ]
192 },
193 {
194 "cell_type": "code",
195 "execution_count": 10,
196 "metadata": {
197 "collapsed": false
198 },
199 "outputs": [
200 {
201 "name": "stdout",
202 "output_type": "stream",
203 "text": [
204 "te tmpl dsehgbralrwranuirtep sag sul doc pea dc nisc tses out ub tial a lee as road yd egoist as avr ted ii to ako durch el hote in a or smc n gig cut i meet fo soir cey lie her a air te ie leed radu to sub rmg ihmmiyfflwvhettaiouc eur tmo so eol hes re ic fig id nd yule log tn eur ass teoa iwohieittposhmpkpsl so snirnwdsstgvrellhmut has are ru up it list mttmcisynalcektrabfi war rwp mere iuu nee too ew fai garry sns wall dwsbveosememalrivees so rhy ieee a some mr no am frn adn he no do eire phys un rf of bwnwrettgthnrterpo admin a petg hao uu tea laird sie renau eeuonwnswypebygeheo plm she vw ann me no a no al woo wnba eric mn a to den bus oed yau so eea us pre on new step tn rene lrrbdicswsaoadawl of ooaecotbhcerprrusoes neg ft sfa is turn he trn he ovc fost aea ord inc two cas ya ttiw wisc au wds sons ldlkfdmmelvunomrecet\n"
205 ]
206 }
207 ],
208 "source": [
209 "print(' '.join(segment(sanitise(column_transposition_decipher(sanitise(c4bs), key_b[0], \n",
210 " fillcolumnwise=key_b[1], \n",
211 " emptycolumnwise=key_b[2])))))"
212 ]
213 },
214 {
215 "cell_type": "code",
216 "execution_count": 11,
217 "metadata": {
218 "collapsed": false
219 },
220 "outputs": [
221 {
222 "data": {
223 "text/plain": [
224 "<matplotlib.axes._subplots.AxesSubplot at 0x7f773db9db70>"
225 ]
226 },
227 "execution_count": 11,
228 "metadata": {},
229 "output_type": "execute_result"
230 },
231 {
232 "data": {
233 "image/png": "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\n",
234 "text/plain": [
235 "<matplotlib.figure.Figure at 0x7f773daa0400>"
236 ]
237 },
238 "metadata": {},
239 "output_type": "display_data"
240 }
241 ],
242 "source": [
243 "freqs_4b = pd.Series(collections.Counter([l.lower() for l in c4b if l in string.ascii_letters]))\n",
244 "freqs_4b.plot(kind='bar')"
245 ]
246 },
247 {
248 "cell_type": "code",
249 "execution_count": 12,
250 "metadata": {
251 "collapsed": false
252 },
253 "outputs": [
254 {
255 "data": {
256 "text/plain": [
257 "(5, -1581.9784460662272)"
258 ]
259 },
260 "execution_count": 12,
261 "metadata": {},
262 "output_type": "execute_result"
263 }
264 ],
265 "source": [
266 "railfence_break(c4bs)"
267 ]
268 },
269 {
270 "cell_type": "code",
271 "execution_count": 13,
272 "metadata": {
273 "collapsed": false
274 },
275 "outputs": [
276 {
277 "data": {
278 "text/plain": [
279 "'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'"
280 ]
281 },
282 "execution_count": 13,
283 "metadata": {},
284 "output_type": "execute_result"
285 }
286 ],
287 "source": [
288 "' '.join(segment(railfence_decipher(c4bs, 5)))"
289 ]
290 },
291 {
292 "cell_type": "code",
293 "execution_count": null,
294 "metadata": {
295 "collapsed": false
296 },
297 "outputs": [],
298 "source": []
299 }
300 ],
301 "metadata": {
302 "kernelspec": {
303 "display_name": "Python 3",
304 "language": "python",
305 "name": "python3"
306 },
307 "language_info": {
308 "codemirror_mode": {
309 "name": "ipython",
310 "version": 3
311 },
312 "file_extension": ".py",
313 "mimetype": "text/x-python",
314 "name": "python",
315 "nbconvert_exporter": "python",
316 "pygments_lexer": "ipython3",
317 "version": "3.4.3"
318 }
319 },
320 "nbformat": 4,
321 "nbformat_minor": 0
322 }