{ "cells": [ { "cell_type": "code", "execution_count": 5, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import string\n", "import itertools" ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def sanitised(text):\n", " return ''.join(letter.lower() for letter in text if letter in string.ascii_letters)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'thequickbrownfoxjumpedoverthelzydoga'" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "sanitised('The quick brown fox! jumped OVER the l\\a!z%y* dog....a')" ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "collapsed": false }, "outputs": [], "source": [ "def encipher_letter(key, current):\n", " new = (ord(key) + ord(current) - 2 * ord('a')) % 26\n", " return chr(new + ord('a'))" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def decipher_letter(key, current):\n", " new = (ord(current) - ord(key)) % 26\n", " return chr(new + ord('a'))" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'a'" ] }, "execution_count": 13, "metadata": {}, "output_type": "execute_result" } ], "source": [ "encipher_letter('a', 'a')" ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'abcdefghijklmnopqrstuvwxyz'" ] }, "execution_count": 14, "metadata": {}, "output_type": "execute_result" } ], "source": [ "''.join(encipher_letter('a', l) for l in string.ascii_lowercase)" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'bcdefghijklmnopqrstuvwxyza'" ] }, "execution_count": 15, "metadata": {}, "output_type": "execute_result" } ], "source": [ "''.join(encipher_letter('b', l) for l in string.ascii_lowercase)" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'abcdefghijklmnopqrstuvwxyz'" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "''.join(decipher_letter('a', l) for l in string.ascii_lowercase)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'zabcdefghijklmnopqrstuvwxy'" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "''.join(decipher_letter('b', l) for l in string.ascii_lowercase)" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'b'" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "decipher_letter('a', 'b')" ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'abcdefghijklmnopqrstuvwxyzbcdefghijklmnopqrstuvwxyzacdefghijklmnopqrstuvwxyzabdefghijklmnopqrstuvwxyzabcefghijklmnopqrstuvwxyzabcdfghijklmnopqrstuvwxyzabcdeghijklmnopqrstuvwxyzabcdefhijklmnopqrstuvwxyzabcdefgijklmnopqrstuvwxyzabcdefghjklmnopqrstuvwxyzabcdefghiklmnopqrstuvwxyzabcdefghijlmnopqrstuvwxyzabcdefghijkmnopqrstuvwxyzabcdefghijklnopqrstuvwxyzabcdefghijklmopqrstuvwxyzabcdefghijklmnpqrstuvwxyzabcdefghijklmnoqrstuvwxyzabcdefghijklmnoprstuvwxyzabcdefghijklmnopqstuvwxyzabcdefghijklmnopqrtuvwxyzabcdefghijklmnopqrsuvwxyzabcdefghijklmnopqrstvwxyzabcdefghijklmnopqrstuwxyzabcdefghijklmnopqrstuvxyzabcdefghijklmnopqrstuvwyzabcdefghijklmnopqrstuvwxzabcdefghijklmnopqrstuvwxy'" ] }, "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ "''.join(encipher_letter(k, l) \n", " for l in string.ascii_lowercase \n", " for k in string.ascii_lowercase)" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "[('a', 'a', 'a'),\n", " ('b', 'a', 'b'),\n", " ('c', 'a', 'c'),\n", " ('d', 'a', 'd'),\n", " ('e', 'a', 'e'),\n", " ('f', 'a', 'f'),\n", " ('g', 'a', 'g'),\n", " ('h', 'a', 'h'),\n", " ('i', 'a', 'i'),\n", " ('j', 'a', 'j')]" ] }, "execution_count": 20, "metadata": {}, "output_type": "execute_result" } ], "source": [ "encrypted = [(k, l, encipher_letter(k, l)) \n", " for l in string.ascii_lowercase \n", " for k in string.ascii_lowercase]\n", "encrypted[:10]" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "True" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "all(l == decipher_letter(k, e) for k, l, e in encrypted)" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def encipher_message(plaintext, keystring='key'):\n", " key = itertools.cycle(keystring)\n", " ciphertext = ''\n", " previous = keystring[0]\n", " for letter, keychar in zip(plaintext, key):\n", " cipherletter = encipher_letter(keychar, letter)\n", " ciphertext += cipherletter\n", " previous = cipherletter\n", " # previous = letter\n", " return ciphertext" ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'hecoj'" ] }, "execution_count": 23, "metadata": {}, "output_type": "execute_result" } ], "source": [ "encipher_message('hello', 'aardvark')" ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'xubbe'" ] }, "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ "encipher_message('hello', 'q')" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "collapsed": true }, "outputs": [], "source": [ "def decipher_message(ciphertext, keystring='key'):\n", " key = itertools.cycle(keystring)\n", " plaintext = ''\n", " previous = keystring[0]\n", " for letter, keychar in zip(ciphertext, key):\n", " plainletter = decipher_letter(keychar, letter)\n", " plaintext += plainletter\n", " previous = letter\n", " # previous = plainletter\n", " return plaintext" ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'hello'" ] }, "execution_count": 27, "metadata": {}, "output_type": "execute_result" } ], "source": [ "decipher_message('hecoj', 'aardvark')" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'hello'" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "decipher_message('xubbe', 'q')" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'romyt'" ] }, "execution_count": 31, "metadata": {}, "output_type": "execute_result" } ], "source": [ "decipher_message('hecoj', 'q')" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'rijvsmysmysmysmysmysmysmys'" ] }, "execution_count": 34, "metadata": {}, "output_type": "execute_result" } ], "source": [ "encipher_message('helloooooooooooooooooooooo')" ] }, { "cell_type": "code", "execution_count": 35, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'helloooooooooooooooooooooo'" ] }, "execution_count": 35, "metadata": {}, "output_type": "execute_result" } ], "source": [ "decipher_message('rijvsmysmysmysmysmysmysmys')" ] }, { "cell_type": "code", "execution_count": 36, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'qhiurlxrlxrlxrlxrlxrlxrlxr'" ] }, "execution_count": 36, "metadata": {}, "output_type": "execute_result" } ], "source": [ "decipher_message('rijvsmysmysmysmysmysmysmys', 'b')" ] }, { "cell_type": "code", "execution_count": 37, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'dlghpjalicxktzjayi'" ] }, "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ "encipher_message(sanitised('This is a test message'), 'keyphrase')" ] }, { "cell_type": "code", "execution_count": 38, "metadata": { "collapsed": false }, "outputs": [ { "data": { "text/plain": [ "'thisisatestmessage'" ] }, "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ "decipher_message('dlghpjalicxktzjayi', 'keyphrase')" ] }, { "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.2" } }, "nbformat": 4, "nbformat_minor": 0 }