X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;f=szyfrow%2Frailfence.py;h=741e3e2ad3d7bafddbb7d722c468c8103009cb4f;hb=refs%2Fheads%2Fmain;hp=e81b066809623dae8db28cd89d1e90132b122e83;hpb=27c8005f6dea0026887b80a01b5f93a8f1b3c2b2;p=szyfrow.git diff --git a/szyfrow/railfence.py b/szyfrow/railfence.py index e81b066..741e3e2 100644 --- a/szyfrow/railfence.py +++ b/szyfrow/railfence.py @@ -1,3 +1,19 @@ +"""[Railfence transposition cipher](https://en.wikipedia.org/wiki/Rail_fence_cipher). + +Works by splitting the text into sections, then reading across them to +generate the rows in the cipher. The rows are then combined to form the +ciphertext. + +Example: the plaintext "hellotherefriends", with a height of four, written +out in the railfence as + h h i + etere* + lorfns + l e d +(with the * showing the one character to finish the last section). +Each 'section' is two columns, but unfolded. In the example, the first +section is 'hellot'. +""" import math from enum import Enum from itertools import starmap, zip_longest @@ -128,19 +144,6 @@ def railfence_decipher(message, height, fillvalue=''): return cat(c for r in zip_longest(*(down_rows + up_rows), fillvalue='') for c in r) -def railfence_break(message, max_key_length=20, - fitness=Pletters, chunksize=500): - """Breaks a railfence cipher using a matrix of given rank and letter frequencies - - - """ - - sanitised_message = sanitise(message) - results = starmap(worker, [(sanitised_message, i, fitness) - for i in range(2, max_key_length+1)]) - return max(results, key=lambda k: k[1]) - - def railfence_break(message, max_key_length=20, fitness=Pbigrams, chunksize=500): """Breaks a railfence cipher using a range of lengths and