Done tasks 3 and 4
authorNeil Smith <neil.git@njae.me.uk>
Sun, 15 Nov 2015 21:12:59 +0000 (21:12 +0000)
committerNeil Smith <neil.git@njae.me.uk>
Wed, 4 Oct 2017 08:16:06 +0000 (09:16 +0100)
2015-challenge2.ipynb [new file with mode: 0644]
2015-challenge3.ipynb [new file with mode: 0644]
2015-challenge4.ipynb [new file with mode: 0644]
2015/2a.ciphertext [new file with mode: 0644]
2015/2b.ciphertext [new file with mode: 0644]
2015/3a.ciphertext [new file with mode: 0644]
2015/3b.ciphertext [new file with mode: 0644]
2015/4a.ciphertext [new file with mode: 0644]
2015/4b.ciphertext [new file with mode: 0644]

diff --git a/2015-challenge2.ipynb b/2015-challenge2.ipynb
new file mode 100644 (file)
index 0000000..8a55515
--- /dev/null
@@ -0,0 +1,138 @@
+{
+ "cells": [
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "import matplotlib.pyplot as plt\n",
+    "%matplotlib inline\n",
+    "\n",
+    "from cipherbreak import *\n",
+    "\n",
+    "c2a = open('2015/2a.ciphertext').read()\n",
+    "c2b = open('2015/2b.ciphertext').read()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(15, -1150.5844346071483)"
+      ]
+     },
+     "execution_count": 2,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "key_a, score = caesar_break(c2a)\n",
+    "key_a, score"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 3,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "CHARLIE, NO NEED TO APOLOGISE, LIFE WAS GETTING DULL BEHIND A DESK AND I WAS GLAD TO HAVE AN EXCUSE TO FLY BACK TO EUROPE. I AM INTRIGUED ABOUT THE REICHSDOKTOR - I HADN'T COME ACROSS THIS BEFORE, WHEN DID YOU FIRST COME HEAR OF IT? \n",
+      "I THINK I MAY ALREADY BE MAKING SOME PROGRESS. ON ARRIVAL I FOUND A POSTCARD WAITING FOR ME ON THE MAT AT THE EMBASSY WITH NO MESSAGE ON IT . AT LEAST THAT'S WHAT IT LOOKED LIKE AT FIRST. I DID NOTICE THAT THE LETTERS ON THE FRONT COULD BE HIGHLIGHTED TO PICK OUT THE PHRASE THE REICHSDOKTOR SO UNLESS THAT IS AN EXTRAORDINARY COINCIDENCE I FIGURED IT MUST BE RELATED TO OUR INVESTIGATION. THE STRANGEST THING WAS THAT THE POSTCARD HAD A STAMP BUT NO POSTMARK ON IT, SO IT CAN'T HAVE BEEN POSTED. SINCE IT WASN'T SIGNED I ASSUME THEY WANTED TO STAY ANONYMOUS AND I COULDN'T SEE WHY THEY WOULD HAVE TAKEN THE RISK OF HAND DELIVERING IT, BUT IN THE END I WORKED IT OUT. THERE WAS A HIDDEN MESSAGE. I'LL LEAVE IT TO YOU TO FIGURE OUT WHERE IT WAS HIDDEN. ANYWAY I'VE ATTACHED THE MESSAGE I FOUND. I KNOW THAT RELATIONS WITH THREE OF THE FOUR POWERS ARE RELATIVELY STABLE, BUT I THINK WE NEED TO KEEP THIS TO OURSELVES FOR NOW. ALL THE BEST, \n",
+      "HARRY\n",
+      "\n"
+     ]
+    }
+   ],
+   "source": [
+    "print(caesar_decipher(c2a, key_a))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 4,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(21, -574.2402792119872)"
+      ]
+     },
+     "execution_count": 4,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "key_b, score = caesar_break(c2b)\n",
+    "key_b, score"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "if you really want to get in the middle of this you will have to pay i know you will be hunting me and i can forgive the arrogance but i will not forgive your ignorance before you can learn more about the rat lines from me you will have to ask your colleagues in french and british intelligence what they already know powerful forces are working to keep the rat lines running and we both need to know who our enemies are before we can meet you should understand that without me your investigations will gain little negotiations with me may gain everything\n"
+     ]
+    }
+   ],
+   "source": [
+    "print(' '.join(segment(sanitise(caesar_decipher(c2b, key_b)))))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": false
+   },
+   "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.4.3"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
diff --git a/2015-challenge3.ipynb b/2015-challenge3.ipynb
new file mode 100644 (file)
index 0000000..2b81441
--- /dev/null
@@ -0,0 +1,136 @@
+{
+ "cells": [
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "import matplotlib.pyplot as plt\n",
+    "%matplotlib inline\n",
+    "\n",
+    "from cipherbreak import *\n",
+    "\n",
+    "c3a = open('2015/3a.ciphertext').read()\n",
+    "c3b = open('2015/3b.ciphertext').read()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "((3, 5, True), -901.37737042341)"
+      ]
+     },
+     "execution_count": 6,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "(key_a_m, key_a_a, key_a_o), score = affine_break(c3a)\n",
+    "(key_a_m, key_a_a, key_a_o), score"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "HARRY, THE PUZZLE OF THE STAMPED POSTCARD HAD ME FOOLED FOR A WHILE, BUT I THINK I FIGURED IT OUT. WAS THE MESSAGE ON THE BACK OF THE STAMP? I AM GUESSING YOU STEAMED IT OFF AND FOUND IT THERE. IT WAS A PRETTY INGENIOUS PLOY. MY MASTERS BACK IN WASHINGTON ARE INCREASINGLY WORRIED ABOUT OUR RELATIONSHIP WITH THE REST OF THE FOUR POWERS. FOLLOWING THE BREAKDOWN IN TRUST WITH THE SOVIETS THEY ARE COUNTING ON THE UK AND FRANCE AS ALLIES. IF THEY ARE GOING BEHIND OUR BACKS WITH THIS REICHSDOKTOR, THAT DOES NOT BODE WELL FOR FUTURE DIPLOMACY. DO YOU HAVE CONTACTS THERE YOU CAN EXPLOIT TO FIND OUT WHAT THEY ARE INTENDING? WE REALLY CANNOT AFFORD TO FALL OUT RIGHT NOW. THE ATTACHED MESSAGE IS ANOTHER INTERCEPT, THIS TIME FROM THE BRITISH EMBASSY WIRELESS. WHILE THINGS ARE DICEY I DON’T FEEL I CAN ASK THEM ABOUT IT, MAYBE YOU COULD CRACK IT FOR US. DOES IT MENTION THE RATLINES? BEST, CHARLIE\n",
+      "\n"
+     ]
+    }
+   ],
+   "source": [
+    "print(affine_decipher(c3a, multiplier=key_a_m, adder=key_a_a, one_based=key_a_o))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 10,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "((5, 7, True), -574.5522852453349)"
+      ]
+     },
+     "execution_count": 10,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "(key_b_m, key_b_a, key_b_o), score = affine_break(c3b)\n",
+    "(key_b_m, key_b_a, key_b_o), score"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 12,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "eyes only rumours of a source in berlin with access to the rat lines source seems to go by name of reichs doktor russian intercepts suggest has been seen in vicinity of us embassy not clear how to make direct contact also not clear why our us friends are keeping this to themselves detailed info about rat i lines hard to obtain but high value could lead to arrest of major targets of nuremberg investigations vital we reach reichs doktor at earliest opportunity discreet enquiries in french and us sectors only request funds for further investigation\n"
+     ]
+    }
+   ],
+   "source": [
+    "print(' '.join(segment(sanitise(affine_decipher(c3b, multiplier=key_b_m, adder=key_b_a, one_based=key_b_o)))))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": null,
+   "metadata": {
+    "collapsed": false
+   },
+   "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.4.3"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
diff --git a/2015-challenge4.ipynb b/2015-challenge4.ipynb
new file mode 100644 (file)
index 0000000..201aa9c
--- /dev/null
@@ -0,0 +1,260 @@
+{
+ "cells": [
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [],
+   "source": [
+    "import matplotlib.pyplot as plt\n",
+    "%matplotlib inline\n",
+    "\n",
+    "from cipherbreak import *\n",
+    "\n",
+    "c4a = open('2015/4a.ciphertext').read()\n",
+    "c4b = open('2015/4b.ciphertext').read()"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(('reanimates', <KeywordWrapAlphabet.from_last: 2>), -911.6411317751041)"
+      ]
+     },
+     "execution_count": 6,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "(key_a_word, key_a_wrap), score = keyword_break_mp(c4a)\n",
+    "(key_a_word, key_a_wrap), score"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 8,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "gharlie, the attaghew note fas ledt in one od my weaw wrops last nibht anw appears to ce drom our mysterious sourge. it gontains tfo really sibnidigant pieges od intellibenge. the dirst is that the rieghswoktor mibht not reder to an inwiviwual adter all. it seems to ce the gowename dor the orbanization runninb the ratlines. aggorwinb to my other sourges this is a gollegtion od routes, abents anw sade houses usew to transport nazi sympathisers anw far griminals out od bermany anw on to south ameriga. fe have knofn that sugh an orbanisation exists singe the enw od the far, cut this is the dirst time i have seen it namew. the other piege od indormation is mugh more suctle. i am cebinninb to fonwer id our sourge is gloser to home than fe haw realisew. anw i am not rederrinb to drangois! see id you gan spot the tfo thinbs i notigew. cy the fay, fho transgricew the rawio intergept you sent me last feek? harry\n",
+      "\n"
+     ]
+    }
+   ],
+   "source": [
+    "print(keyword_decipher(c4a, key_a_word, wrap_alphabet=key_a_wrap))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 17,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "{'a': 'c',\n",
+       " 'b': 'o',\n",
+       " 'c': 'p',\n",
+       " 'd': 'q',\n",
+       " 'e': 'b',\n",
+       " 'f': 'r',\n",
+       " 'g': 's',\n",
+       " 'h': 't',\n",
+       " 'i': 'e',\n",
+       " 'j': 'u',\n",
+       " 'k': 'v',\n",
+       " 'l': 'w',\n",
+       " 'm': 'f',\n",
+       " 'n': 'd',\n",
+       " 'o': 'x',\n",
+       " 'p': 'y',\n",
+       " 'q': 'z',\n",
+       " 'r': 'a',\n",
+       " 's': 'h',\n",
+       " 't': 'g',\n",
+       " 'u': 'i',\n",
+       " 'v': 'j',\n",
+       " 'w': 'k',\n",
+       " 'x': 'l',\n",
+       " 'y': 'm',\n",
+       " 'z': 'n'}"
+      ]
+     },
+     "execution_count": 17,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "trans = ''.maketrans(keyword_cipher_alphabet_of(key_a_word, wrap_alphabet=key_a_wrap), string.ascii_lowercase)\n",
+    "t2 = {chr(c): chr(trans[c]) for c in trans}\n",
+    "t2"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 21,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[('r', 'a'),\n",
+       " ('a', 'b'),\n",
+       " ('t', 'c'),\n",
+       " ('l', 'd'),\n",
+       " ('i', 'e'),\n",
+       " ('n', 'f'),\n",
+       " ('e', 'g'),\n",
+       " ('s', 'h'),\n",
+       " ('u', 'i'),\n",
+       " ('v', 'j'),\n",
+       " ('w', 'k'),\n",
+       " ('x', 'l'),\n",
+       " ('y', 'm'),\n",
+       " ('z', 'n'),\n",
+       " ('b', 'o'),\n",
+       " ('c', 'p'),\n",
+       " ('d', 'q'),\n",
+       " ('f', 'r'),\n",
+       " ('g', 's'),\n",
+       " ('h', 't'),\n",
+       " ('j', 'u'),\n",
+       " ('k', 'v'),\n",
+       " ('m', 'w'),\n",
+       " ('o', 'x'),\n",
+       " ('p', 'y'),\n",
+       " ('q', 'z')]"
+      ]
+     },
+     "execution_count": 21,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "t2['t'] = 'c'\n",
+    "t2['a'] = 'b'\n",
+    "t2['e'] = 'g'\n",
+    "\n",
+    "t2['l'] = 'd'\n",
+    "t2['n'] = 'f'\n",
+    "t2['m'] = 'w'\n",
+    "\n",
+    "sorted(((c, t2[c]) for c in t2), key=lambda p: p[1])"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 23,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "charlie, the attached note was left in one of my dead drops last night and appears to be from our mysterious source. it contains two really significant pieces of intelligence. the first is that the riechsdoktor might not refer to an individual after all. it seems to be the codename for the organization running the ratlines. according to my other sources this is a collection of routes, agents and safe houses used to transport nazi sympathisers and war criminals out of germany and on to south america. we have known that such an organisation exists since the end of the war, but this is the first time i have seen it named. the other piece of information is much more subtle. i am beginning to wonder if our source is closer to home than we had realised. and i am not referring to francois! see if you can spot the two things i noticed. by the way, who transcribed the radio intercept you sent me last week? harry\n",
+      "\n"
+     ]
+    }
+   ],
+   "source": [
+    "print(keyword_decipher(c4a, 'ratlines', wrap_alphabet=key_a_wrap))"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 26,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "(('francois', <KeywordWrapAlphabet.from_last: 2>), -1032.067747212964)"
+      ]
+     },
+     "execution_count": 26,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "(key_b_word, key_b_wrap), score =keyword_break_mp(c4b)\n",
+    "(key_b_word, key_b_wrap), score"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 27,
+   "metadata": {
+    "collapsed": false
+   },
+   "outputs": [
+    {
+     "name": "stdout",
+     "output_type": "stream",
+     "text": [
+      "r friends they plan to infiltrate the rat i lines and to try to turn the high value targets for themselves they have a particular interest in nazi scientists from the die alchemist en project if you want to break the reichs doktor network before they can do so take care not to share any intelligence with them you have been warned i think it is time to begin negotiations i have a number in mind and i think once you know what i am offering you will find it very reasonable as a sign of good faith ioffer you the following information one of the local rat i line coordinators will be leaving the us sector tomorrow night in a black limousine under the backseat of his car you will find hidden a juniors s officer who is trying to escape and in the trunk you will find a number of papers relating to stolen artworks that he hopes to trade to the french for his freedom you might want to consider carefully whether you can trust your friend charlie with this information after all her husband francois is french\n"
+     ]
+    }
+   ],
+   "source": [
+    "print(' '.join(segment(sanitise(keyword_decipher(c4b, key_b_word, wrap_alphabet=key_b_wrap)))))"
+   ]
+  },
+  {
+   "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.4.3"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 0
+}
diff --git a/2015/2a.ciphertext b/2015/2a.ciphertext
new file mode 100644 (file)
index 0000000..46aac34
--- /dev/null
@@ -0,0 +1,3 @@
+RWPGAXT, CD CTTS ID PEDADVXHT, AXUT LPH VTIIXCV SJAA QTWXCS P STHZ PCS X LPH VAPS ID WPKT PC TMRJHT ID UAN QPRZ ID TJGDET. X PB XCIGXVJTS PQDJI IWT GTXRWHSDZIDG - X WPSC’I RDBT PRGDHH IWXH QTUDGT, LWTC SXS NDJ UXGHI RDBT WTPG DU XI? 
+X IWXCZ X BPN PAGTPSN QT BPZXCV HDBT EGDVGTHH. DC PGGXKPA X UDJCS P EDHIRPGS LPXIXCV UDG BT DC IWT BPI PI IWT TBQPHHN LXIW CD BTHHPVT DC XI . PI ATPHI IWPI’H LWPI XI ADDZTS AXZT PI UXGHI. X SXS CDIXRT IWPI IWT ATIITGH DC IWT UGDCI RDJAS QT WXVWAXVWITS ID EXRZ DJI IWT EWGPHT IWT GTXRWHSDZIDG HD JCATHH IWPI XH PC TMIGPDGSXCPGN RDXCRXSTCRT X UXVJGTS XI BJHI QT GTAPITS ID DJG XCKTHIXVPIXDC. IWT HIGPCVTHI IWXCV LPH IWPI IWT EDHIRPGS WPS P HIPBE QJI CD EDHIBPGZ DC XI, HD XI RPC’I WPKT QTTC EDHITS. HXCRT XI LPHC’I HXVCTS X PHHJBT IWTN LPCITS ID HIPN PCDCNBDJH PCS X RDJASC’I HTT LWN IWTN LDJAS WPKT IPZTC IWT GXHZ DU WPCS STAXKTGXCV XI, QJI XC IWT TCS X LDGZTS XI DJI. IWTGT LPH P WXSSTC BTHHPVT. X’AA ATPKT XI ID NDJ ID UXVJGT DJI LWTGT XI LPH WXSSTC. PCNLPN X’KT PIIPRWTS IWT BTHHPVT X UDJCS. X ZCDL IWPI GTAPIXDCH LXIW IWGTT DU IWT UDJG EDLTGH PGT GTAPIXKTAN HIPQAT, QJI X IWXCZ LT CTTS ID ZTTE IWXH ID DJGHTAKTH UDG CDL. PAA IWT QTHI, 
+WPGGN
diff --git a/2015/2b.ciphertext b/2015/2b.ciphertext
new file mode 100644 (file)
index 0000000..b80a509
--- /dev/null
@@ -0,0 +1 @@
+DATJP MZVGG TRVIO OJBZO DIOCZ HDYYG ZJAOC DNTJP RDGGC VQZOJ KVTDF IJRTJ PRDGG WZCPI ODIBH ZVIYD XVIAJ MBDQZ OCZVM MJBVI XZWPO DRDGG IJOAJ MBDQZ TJPMD BIJMV IXZWZ AJMZT JPXVI GZVMI HJMZV WJPOO CZMVO GDIZN AMJHH ZTJPR DGGCV QZOJV NFTJP MXJGG ZVBPZ NDIAM ZIXCV IYWMD ODNCD IOZGG DBZIX ZRCVO OCZTV GMZVY TFIJR KJRZM APGAJ MXZNV MZRJM FDIBO JFZZK OCZMV OGDIZ NMPII DIBVI YRZWJ OCIZZ YOJFI JRRCJ JPMZI ZHDZN VMZWZ AJMZR ZXVIH ZZOTJ PNCJP GYPIY ZMNOV IYOCV ORDOC JPOHZ TJPMD IQZNO DBVOD JINRD GGBVD IGDOO GZIZB JODVO DJINR DOCHZ HVTBV DIZQZ MTOCD IB 
diff --git a/2015/3a.ciphertext b/2015/3a.ciphertext
new file mode 100644 (file)
index 0000000..56faecc
--- /dev/null
@@ -0,0 +1 @@
+CHGGB, MCT APEEOT XW MCT JMHRATQ AXJMNHGQ CHQ RT WXXOTQ WXG H VCFOT, KPM F MCFUL F WFZPGTQ FM XPM. VHJ MCT RTJJHZT XU MCT KHNL XW MCT JMHRA? F HR ZPTJJFUZ BXP JMTHRTQ FM XWW HUQ WXPUQ FM MCTGT. FM VHJ H AGTMMB FUZTUFXPJ AOXB. RB RHJMTGJ KHNL FU VHJCFUZMXU HGT FUNGTHJFUZOB VXGGFTQ HKXPM XPG GTOHMFXUJCFA VFMC MCT GTJM XW MCT WXPG AXVTGJ. WXOOXVFUZ MCT KGTHLQXVU FU MGPJM VFMC MCT JXSFTMJ MCTB HGT NXPUMFUZ XU MCT PL HUQ WGHUNT HJ HOOFTJ. FW MCTB HGT ZXFUZ KTCFUQ XPG KHNLJ VFMC MCFJ GTFNCJQXLMXG, MCHM QXTJ UXM KXQT VTOO WXG WPMPGT QFAOXRHNB. QX BXP CHST NXUMHNMJ MCTGT BXP NHU TYAOXFM MX WFUQ XPM VCHM MCTB HGT FUMTUQFUZ? VT GTHOOB NHUUXM HWWXGQ MX WHOO XPM GFZCM UXV. MCT HMMHNCTQ RTJJHZT FJ HUXMCTG FUMTGNTAM, MCFJ MFRT WGXR MCT KGFMFJC TRKHJJB VFGTOTJJ. VCFOT MCFUZJ HGT QFNTB F QXU’M WTTO F NHU HJL MCTR HKXPM FM, RHBKT BXP NXPOQ NGHNL FM WXG PJ. QXTJ FM RTUMFXU MCT GHMOFUTJ? KTJM, NCHGOFT
diff --git a/2015/3b.ciphertext b/2015/3b.ciphertext
new file mode 100644 (file)
index 0000000..de9a457
--- /dev/null
@@ -0,0 +1 @@
+FBFXD YOBSH TDHSX DKLXD HSVFZ YQFSO ZYRZC ULVVF XXCDC UFSLC OZYFX XDHSV FXFFT XCDPD QBYLT FDKSF ZVUXA DJCDS SHXXZ LYZYC FSVFI CXXHP PFXCU LXQFF YXFFY ZYMZV ZYZCB DKHXF TQLXX BYDCV OFLSU DRCDT LJFAZ SFVCV DYCLV CLOXD YDCVO FLSRU BDHSH XKSZF YAXLS FJFFI ZYPCU ZXCDC UFTXF OMFXA FCLZO FAZYK DLQDH CSLCZ OZYFX ULSAC DDQCL ZYQHC UZPUM LOHFV DHOAO FLACD LSSFX CDKTL EDSCL SPFCX DKYHS FTQFS PZYMF XCZPL CZDYX MZCLO RFSFL VUSFZ VUXAD JCDSL CFLSO ZFXCD IIDSC HYZCB AZXVS FFCFY NHZSZ FXZYK SFYVU LYAHX XFVCD SXDYO BSFNH FXCKH YAXKD SKHSC UFSZY MFXCZ PLCZD Y 
diff --git a/2015/4a.ciphertext b/2015/4a.ciphertext
new file mode 100644 (file)
index 0000000..6db3a2e
--- /dev/null
@@ -0,0 +1 @@
+TSRFXUI, HSI RHHRTSIL ZBHI MRG XINH UZ BZI BN YP LIRL LFBCG XRGH ZUESH RZL RCCIRFG HB AI NFBY BJF YPGHIFUBJG GBJFTI. UH TBZHRUZG HMB FIRXXP GUEZUNUTRZH CUITIG BN UZHIXXUEIZTI. HSI NUFGH UG HSRH HSI FUITSGLBWHBF YUESH ZBH FINIF HB RZ UZLUKULJRX RNHIF RXX. UH GIIYG HB AI HSI TBLIZRYI NBF HSI BFERZUQRHUBZ FJZZUZE HSI FRHXUZIG. RTTBFLUZE HB YP BHSIF GBJFTIG HSUG UG R TBXXITHUBZ BN FBJHIG, REIZHG RZL GRNI SBJGIG JGIL HB HFRZGCBFH ZRQU GPYCRHSUGIFG RZL MRF TFUYUZRXG BJH BN EIFYRZP RZL BZ HB GBJHS RYIFUTR. MI SRKI WZBMZ HSRH GJTS RZ BFERZUGRHUBZ IOUGHG GUZTI HSI IZL BN HSI MRF, AJH HSUG UG HSI NUFGH HUYI U SRKI GIIZ UH ZRYIL. HSI BHSIF CUITI BN UZNBFYRHUBZ UG YJTS YBFI GJAHXI. U RY AIEUZZUZE HB MBZLIF UN BJF GBJFTI UG TXBGIF HB SBYI HSRZ MI SRL FIRXUGIL. RZL U RY ZBH FINIFFUZE HB NFRZTBUG! GII UN PBJ TRZ GCBH HSI HMB HSUZEG U ZBHUTIL. AP HSI MRP, MSB HFRZGTFUAIL HSI FRLUB UZHIFTICH PBJ GIZH YI XRGH MIIW? SRFFP
diff --git a/2015/4b.ciphertext b/2015/4b.ciphertext
new file mode 100644 (file)
index 0000000..9b6d8ac
--- /dev/null
@@ -0,0 +1 @@
+EOETC YNGHS CPBWF YHZTY OTWHE FHCHS CEFHT WTYCG FYNHZ HEPHZ HJEYH SCSTI SKFWJ CHFEI CHGOZ EHSCX GCWKC GHSCP SFKCF BFEHT AJWFE TYHCE CGHTY YFQTG ATCYH TGHGO EZXHS CNTCF WASCX TGHCY BEZUC AHTOP ZJLFY HHZRE CFVHS CECTA SGNZV HZEYC HLZEV RCOZE CHSCP AFYNZ GZHFV CAFEC YZHHZ GSFEC FYPTY HCWWT ICYAC LTHSH SCXPZ JSFKC RCCYL FEYCN THSTY VTHTG HTXCH ZRCIT YYCIZ HTFHT ZYGTS FKCFY JXRCE TYXTY NFYNT HSTYV ZYACP ZJVYZ LLSFH TFXZO OCETY IPZJL TWWOT YNTHK CEPEC FGZYF RWCFG FGTIY ZOIZZ NOFTH STZOO CEPZJ HSCOZ WWZLT YITYO ZEXFH TZYZY CZOHS CWZAF WEFHT WTYCA ZZENT YFHZE GLTWW RCWCF KTYIH SCJGG CAHZE HZXZE EZLYT ISHTY FRWFA VWTXZ JGTYC JYNCE HSCRF AVGCF HZOST GAFEP ZJLTW WOTYN STNNC YFUJY TZEGG ZOOTA CELSZ TGHEP TYIHZ CGAFB CFYNT YHSCH EJYVP ZJLTW WOTYN FYJXR CEZOB FBCEG ECWFH TYIHZ GHZWC YFEHL ZEVGH SFHSC SZBCG HZHEF NCHZH SCOEC YASOZ ESTGO ECCNZ XPZJX TISHL FYHHZ AZYGT NCEAF ECOJW WPLSC HSCEP ZJAFY HEJGH PZJEO ETCYN ASFEW TCLTH SHSTG TYOZE XFHTZ YFOHC EFWWS CESJG RFYNO EFYAZ TGTGO ECYAS