import matplotlib.pyplot as plt
+logger = logging.getLogger(__name__)
+logger.addHandler(logging.FileHandler('cipher.log'))
+logger.setLevel(logging.WARNING)
+#logger.setLevel(logging.INFO)
+#logger.setLevel(logging.DEBUG)
+
from cipher import *
from language_models import *
>>> frequencies('abcdefabcdef')['x']
0
"""
- #counts = collections.defaultdict(int)
- #for c in text:
- # counts[c] += 1
- #return counts
return collections.Counter(c for c in text)
>>> caesar_break('ibxcsyorsaqcheyklxivoexlevmrimwxsfiqevvmihrsasrxliwyrh' \
'ecjsppsamrkwleppfmergefifvmhixscsymjcsyqeoixlm') # doctest: +ELLIPSIS
- (4, -130.849890899...)
+ (4, -130.849989015...)
>>> caesar_break('wxwmaxdgheetgwuxztgptedbgznitgwwhpguxyhkxbmhvvtlbhgtee' \
'raxlmhiixweblmxgxwmhmaxybkbgztgwztsxwbgmxgmert') # doctest: +ELLIPSIS
- (19, -128.82516920...)
+ (19, -128.82410410...)
>>> caesar_break('yltbbqnqnzvguvaxurorgenafsbezqvagbnornfgsbevpnaabjurer' \
'svaquvzyvxrnznazlybequrvfohgriraabjtbaruraprur') # doctest: +ELLIPSIS
- (13, -126.25233502...)
+ (13, -126.25403935...)
"""
sanitised_message = sanitise(message)
best_shift = 0
'ls umfjsd jlsi zg hfsqysxog. ls dmmdtsd mx jls bats mh bkbsf. ls ' \
'bfmctsd kfmyxd jls lyj, mztanamyu xmc jm clm cku tmmeaxw kj lai ' \
'kxd clm ckuxj.') # doctest: +ELLIPSIS
- ((15, 22, True), -340.611412245...)
+ ((15, 22, True), -340.601181913...)
"""
sanitised_message = sanitise(message)
best_multiplier = 0
frequency analysis
>>> keyword_break(keyword_encipher('this is a test message for the ' \
- 'keyword decipherment', 'elephant', 1), \
+ 'keyword decipherment', 'elephant', Keyword_wrap_alphabet.from_last), \
wordlist=['cat', 'elephant', 'kangaroo']) # doctest: +ELLIPSIS
- (('elephant', 1), -52.8345642265...)
+ (('elephant', <Keyword_wrap_alphabet.from_last: 2>), -52.834575011...)
"""
best_keyword = ''
best_wrap_alphabet = True
best_fit = float("-inf")
- for wrap_alphabet in range(3):
+ for wrap_alphabet in Keyword_wrap_alphabet:
for keyword in wordlist:
plaintext = keyword_decipher(message, keyword, wrap_alphabet)
fit = fitness(plaintext)
frequency analysis
>>> keyword_break_mp(keyword_encipher('this is a test message for the ' \
- 'keyword decipherment', 'elephant', 1), \
+ 'keyword decipherment', 'elephant', Keyword_wrap_alphabet.from_last), \
wordlist=['cat', 'elephant', 'kangaroo']) # doctest: +ELLIPSIS
- (('elephant', 1), -52.834564226507...)
+ (('elephant', <Keyword_wrap_alphabet.from_last: 2>), -52.834575011...)
"""
with Pool() as pool:
helper_args = [(message, word, wrap, fitness)
- for word in wordlist for wrap in range(3)]
+ for word in wordlist
+ for wrap in Keyword_wrap_alphabet]
# Gotcha: the helper function here needs to be defined at the top level
# (limitation of Pool.starmap)
breaks = pool.starmap(keyword_break_worker, helper_args, chunksize)
>>> vigenere_keyword_break(vigenere_encipher(sanitise('this is a test ' \
'message for the vigenere decipherment'), 'cat'), \
wordlist=['cat', 'elephant', 'kangaroo']) # doctest: +ELLIPSIS
- ('cat', -52.9479167030...)
+ ('cat', -52.947271216...)
"""
best_keyword = ''
best_fit = float("-inf")
>>> vigenere_keyword_break_mp(vigenere_encipher(sanitise('this is a test ' \
'message for the vigenere decipherment'), 'cat'), \
wordlist=['cat', 'elephant', 'kangaroo']) # doctest: +ELLIPSIS
- ('cat', -52.9479167030...)
+ ('cat', -52.947271216...)
"""
with Pool() as pool:
helper_args = [(message, word, fitness)
"certain that the theft has been discovered and that I will " \
"be caught. The SS officer visits less often now that he is " \
"sure"), 'florence')) # doctest: +ELLIPSIS
- ('florence', -307.5549865898...)
+ ('florence', -307.5473096791...)
"""
best_fit = float("-inf")
best_key = ''
"certain that the theft has been discovered and that I will " \
"be caught. The SS officer visits less often now " \
"that he is sure"), 'florence')) # doctest: +ELLIPSIS
- ('florence', -307.5549865898...)
+ ('florence', -307.5473096791...)
"""
best_fit = float("-inf")
best_key = ''