X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;f=cipher%2Fvigenere.py;h=f1cfe996c5bc1eb6e4c3fcb6bf1ac708f40a509b;hb=HEAD;hp=dcf4a2bd2919021f0c21acc693886677b4f61eaa;hpb=311b300d197536622980f7a837294d8245e326b4;p=cipher-tools.git diff --git a/cipher/vigenere.py b/cipher/vigenere.py index dcf4a2b..f1cfe99 100644 --- a/cipher/vigenere.py +++ b/cipher/vigenere.py @@ -1,8 +1,9 @@ -from utilities import * -from language_models import * from enum import Enum from itertools import starmap, cycle import multiprocessing +from cipher.caesar import * +from support.utilities import * +from support.language_models import * from logger import logger @@ -43,6 +44,16 @@ beaufort_variant_encipher=vigenere_decipher beaufort_variant_decipher=vigenere_encipher +def index_of_coincidence_scan(text, max_key_length=20): + """Finds the index of coincidence of the text, using different chunk sizes.""" + stext = sanitise(text) + iocs = {} + for i in range(1, max_key_length + 1): + splits = every_nth(stext, i) + mean_ioc = sum(index_of_coincidence(s) for s in splits) / i + iocs[i] = mean_ioc + return iocs + def vigenere_keyword_break_mp(message, wordlist=keywords, fitness=Pletters, chunksize=500): """Breaks a vigenere cipher using a dictionary and frequency analysis.