2021 challenge 1
[cipher-challenge.git] / 2020 / 2020-challenge6.md
1 ---
2 jupyter:
3 jupytext:
4 formats: ipynb,md
5 text_representation:
6 extension: .md
7 format_name: markdown
8 format_version: '1.2'
9 jupytext_version: 1.3.4
10 kernelspec:
11 display_name: Python 3
12 language: python
13 name: python3
14 ---
15
16 ```python Collapsed="false"
17 from szyfrow.keyword_cipher import *
18 from szyfrow.column_transposition import *
19 from szyfrow.vigenere import *
20 from szyfrow.support.text_prettify import *
21 from szyfrow.polybius import *
22 import collections
23 ```
24
25 ```python Collapsed="false"
26 challenge_number = 6
27 plaintext_a_filename = f'plaintext.{challenge_number}a.txt'
28 plaintext_b_filename = f'plaintext.{challenge_number}b.txt'
29 ciphertext_a_filename = f'ciphertext.{challenge_number}a.txt'
30 ciphertext_b_filename = f'ciphertext.{challenge_number}b.txt'
31 ```
32
33 ```python Collapsed="false"
34 ca = open(ciphertext_a_filename).read()
35 sca = sanitise(ca)
36 rsca = cat(reversed(sca))
37 cb = open(ciphertext_b_filename).read()
38 scb = sanitise(cb)
39 ```
40
41 ```python Collapsed="false"
42 fc = collections.Counter(sca)
43 plot_frequency_histogram(fc, sort_key=fc.get)
44 ```
45
46 ```python Collapsed="false"
47 (word_a, wrap_a), score_a = keyword_break_mp(rsca, fitness=Pletters)
48 print(word_a, wrap_a, '\n')
49 pa = keyword_decipher(ca, word_a, wrap_a)
50 print(pa)
51 ```
52
53 ```python Collapsed="false"
54 key_a, score_a = vigenere_frequency_break(sca, fitness=Ptrigrams)
55 print(key_a, '\n')
56 pa = vigenere_decipher(sca, key_a)
57 print(pa)
58 ```
59
60 ```python Collapsed="false"
61 pa = prettify(vigenere_decipher(sca, key_a))
62 print(pa)
63 ```
64
65 ```python Collapsed="false"
66 open(plaintext_a_filename, 'w').write(pa)
67 ```
68
69 ```python Collapsed="false"
70 tscb = column_transposition_decipher(scb, 'rdf', fillcolumnwise=False, emptycolumnwise=True)
71 tscb
72 ```
73
74 ```python Collapsed="false"
75 ptscb = polybius_decipher(tscb, 'a', 'adfgvx', 'adfgvx', wrap_alphabet=KeywordWrapAlphabet.from_last)
76 ptscb
77 ```
78
79 ```python Collapsed="false"
80 word_b, score_b = simulated_annealing_break(ptscb, fitness=Ptrigrams,
81 plain_alphabet=string.ascii_lowercase, cipher_alphabet=keyword_cipher_alphabet_of('rdf', wrap_alphabet=KeywordWrapAlphabet.from_largest))
82 print(word_b, '\n')
83 pb = keyword_decipher(ptscb, word_b)
84 print(pb)
85 ```
86
87 ```python Collapsed="false"
88 ppb = prettify(pb)
89 print(ppb)
90 ```
91
92 ```python Collapsed="false"
93 open(plaintext_b_filename, 'w').write(ppb)
94 ```
95
96 ```python Collapsed="false"
97
98 ```