Challenge 3
authorNeil Smith <neil.git@njae.me.uk>
Wed, 22 Oct 2014 19:08:55 +0000 (20:08 +0100)
committerNeil Smith <neil.git@njae.me.uk>
Wed, 22 Oct 2014 19:08:55 +0000 (20:08 +0100)
2014-challenge3.ipynb [new file with mode: 0644]
2014/3a.ciphertext [new file with mode: 0644]
2014/3b.ciphertext [new file with mode: 0644]

diff --git a/2014-challenge3.ipynb b/2014-challenge3.ipynb
new file mode 100644 (file)
index 0000000..92ac480
--- /dev/null
@@ -0,0 +1,181 @@
+{
+ "metadata": {
+  "name": "",
+  "signature": "sha256:d8ff372312e3a12aff6a0d9e6b5df79509140ca9131aeeb8fc78255c4c5e8cd3"
+ },
+ "nbformat": 3,
+ "nbformat_minor": 0,
+ "worksheets": [
+  {
+   "cells": [
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "import matplotlib.pyplot as plt\n",
+      "import pandas as pd\n",
+      "import collections\n",
+      "import string\n",
+      "%matplotlib inline\n",
+      "\n",
+      "from cipherbreak import *\n",
+      "\n",
+      "c3a = open('2014/3a.ciphertext').read()\n",
+      "c3b = open('2014/3b.ciphertext').read()"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [],
+     "prompt_number": 1
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "freqs = pd.Series(english_counts)\n",
+      "freqs.plot(kind='bar')"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "metadata": {},
+       "output_type": "pyout",
+       "prompt_number": 2,
+       "text": [
+        "<matplotlib.axes.AxesSubplot at 0x7f80ce03bc88>"
+       ]
+      },
+      {
+       "metadata": {},
+       "output_type": "display_data",
+       "png": "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\nTkSuQmCC\n",
+       "text": [
+        "<matplotlib.figure.Figure at 0x7f810453c2b0>"
+       ]
+      }
+     ],
+     "prompt_number": 2
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "key_a, score = affine_break(c3a)\n",
+      "key_a, score"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "metadata": {},
+       "output_type": "pyout",
+       "prompt_number": 3,
+       "text": [
+        "((11, 1, True), -839.4977013876568)"
+       ]
+      }
+     ],
+     "prompt_number": 3
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "print(' '.join(segment(affine_decipher(sanitise(c3a), key_a[0], key_a[1]))))"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "output_type": "stream",
+       "stream": "stdout",
+       "text": [
+        "harry you asked me about the flag day associates they area transnational hacking group dedicated to the overthrow of western capitalism they have been implicated in several major protests including an attempt to takeover the uk national grid attacks on reservoir systems and interference in bank trading networks it looks like the fda carried out fairly extensive modifications to the ship they did a good job too we hadnt noticed the added bulkheads until we compared the layout with the plans from lloyds register they seem to be there to add rigidity though there is one additional panel at the stern that doesnt fit the pattern and we will be removing that tonight to see what it is there for we would have done it this afternoon but decided we should conduct our own hull survey in case there is a booby trap\n"
+       ]
+      }
+     ],
+     "prompt_number": 6
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "key_b, score = keyword_break_mp(c3b)\n",
+      "key_b, score"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "metadata": {},
+       "output_type": "pyout",
+       "prompt_number": 7,
+       "text": [
+        "(('seahorse', <KeywordWrapAlphabet.from_last: 2>), -681.3308426043137)"
+       ]
+      }
+     ],
+     "prompt_number": 7
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "print(' '.join(segment(sanitise(keyword_decipher(c3b, key_b[0], key_b[1])))))"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "output_type": "stream",
+       "stream": "stdout",
+       "text": [
+        "phase three the nautilus system was fully tested last night with complete success we sailed within four hundred metres of the target and monitored all radio traffic for two hours with no sign that we were being watched or were even noticed we then conducted a full radar sweep of the area and found three dead spots where we could work on the ship without detection as planned we converted the two adjacent empty containers in the middle of the stack into a large workshop area and carried out a full inspection drill now even if we are boarded our work should remain undetected we retrieved seahorse from the third container and carried out stage one of the assembly\n"
+       ]
+      }
+     ],
+     "prompt_number": 8
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [
+      "freqs_3b = pd.Series(collections.Counter([l.lower() for l in c3b if l in string.ascii_letters]))\n",
+      "freqs_3b.plot(kind='bar')"
+     ],
+     "language": "python",
+     "metadata": {},
+     "outputs": [
+      {
+       "metadata": {},
+       "output_type": "pyout",
+       "prompt_number": 9,
+       "text": [
+        "<matplotlib.axes.AxesSubplot at 0x7f80cfc0bf60>"
+       ]
+      },
+      {
+       "metadata": {},
+       "output_type": "display_data",
+       "png": "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\n",
+       "text": [
+        "<matplotlib.figure.Figure at 0x7f80cfc0beb8>"
+       ]
+      }
+     ],
+     "prompt_number": 9
+    },
+    {
+     "cell_type": "code",
+     "collapsed": false,
+     "input": [],
+     "language": "python",
+     "metadata": {},
+     "outputs": []
+    }
+   ],
+   "metadata": {}
+  }
+ ]
+}
\ No newline at end of file
diff --git a/2014/3a.ciphertext b/2014/3a.ciphertext
new file mode 100644 (file)
index 0000000..851ccaf
--- /dev/null
@@ -0,0 +1,4 @@
+KLQQP , 
+PJ X LBR DS ND LWJX M MKD OCLZ SLP LBBJH VLMDB . MKD P LQD L MQ LYB-Y LMVJY LC KL HRVYZ ZQJX U SDS VHLMD S MJ MKD J IDQMK QJT J O TDB MDQY HLUVM LCVBN . MKD P KLI D WDD Y VNU CVHLM DS VY BDID QLC N LGJQ UQJMD BMB, VYHCX SVYZ LY LM MDNUM MJ M LRD J IDQ M KD XR YLMV JYLC ZQVS, LMML HRB J Y QDB DQIJV Q BPB MDNB LYS V YMDQO DQDYH D VY WLYR MQLSV YZ YD MTJQR B. 
+
+VM C JJRB CVRD MKD O SL HL QQVDS JXM OLVQC P DEM DYBVI D NJS VOVHL MVJYB MJ M KD BK VU. M KDP S VS L ZJJS GJW M JJ. T D KLS Y’M YJMV HDS M KD LS SDS W XCRKD LSB X YMVC TD HJ NULQD S MKD CLPJ XM TV MK MK D UCL YB OQ JN CC JPS?? ?B QD ZVBMD Q. MK DP BD DN MJ WD M KDQD MJ LS S QVZ VSVMP , MKJ XZK M KDQD VB JY D LSS VMVJY LC UL YDC L M MKD BMDQ Y MKL M SJD BY’ M OVM MKD ULMMD QY LY S TD TVCC WD QD NJIVY Z MKL M MJY VZKM MJ BD D TKL M VM VB MK DQD O JQ. T D TJX CS KL ID SJ YD VM MKVB LOMD QYJJY WXM SDHVS DS TD BKJX CS HJ YSXHM JXQ JTY K XCC B XQIDP VY H LBD M KDQD VB L WJJWP MQLU . 
\ No newline at end of file
diff --git a/2014/3b.ciphertext b/2014/3b.ciphertext
new file mode 100644 (file)
index 0000000..f0957b9
--- /dev/null
@@ -0,0 +1 @@
+DUSIO JUGOO JUOBS KJVYK IIPIJ OZMSI RKYYP JOIJO HYSIJ BVTUJ MVJUA CZDYO JOIKA AOIIM OISVY OHMVJ UVBRC KGUKB HGOHZ OJGOI CRJUO JSGTO JSBHZ CBVJC GOHSY YGSHV CJGSR RVARC GJMCU CKGIM VJUBC IVTBJ USJMO MOGOE OVBTM SJAUO HCGMO GOOLO BBCJV AOHMO JUOBA CBHKA JOHSR KYYGS HSGIM OODCR JUOSG OSSBH RCKBH JUGOO HOSHI DCJIM UOGOM OACKY HMCGX CBJUO IUVDM VJUCK JHOJO AJVCB SIDYS BBOHM OACBL OGJOH JUOJM CSHWS AOBJO ZDJPA CBJSV BOGIV BJUOZ VHHYO CRJUO IJSAX VBJCS YSGTO MCGXI UCDSG OSSBH ASGGV OHCKJ SRKYY VBIDO AJVCB HGVYY BCMOL OBVRM OSGOE CSGHO HCKGM CGXIU CKYHG OZSVB KBHOJ OAJOH MOGOJ GVOLO HIOSU CGIOR GCZJU OJUVG HACBJ SVBOG SBHAS GGVOH CKJIJ STOCB OCRJU OSIIO ZEYP
\ No newline at end of file