X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;f=cipher%2Fvigenere.py;fp=cipher%2Fvigenere.py;h=f1cfe996c5bc1eb6e4c3fcb6bf1ac708f40a509b;hb=1c711fcaa683414ec34bea0ea29269483f498343;hp=362322d8c28dcefeb38a73281da234b5309d5158;hpb=3ee00aa6e241bad0efe7ec600c26bdbfda2a2c00;p=cipher-tools.git diff --git a/cipher/vigenere.py b/cipher/vigenere.py index 362322d..f1cfe99 100644 --- a/cipher/vigenere.py +++ b/cipher/vigenere.py @@ -44,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.