X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;f=cipher.py;h=2ce1c929c7f06f5f081ec70802be5832b01ca03b;hb=743cd32d0fbed8a9b316abd7a6bb0bbeb53473e3;hp=6b49d46974171e26edd615cdbb8e8a7985bf6720;hpb=36ca1e6815f68220d42758ee5bbf92c1de554490;p=cipher-tools.git diff --git a/cipher.py b/cipher.py index 6b49d46..2ce1c92 100644 --- a/cipher.py +++ b/cipher.py @@ -33,13 +33,6 @@ for a in range(26): c = (a * b) % 26 modular_division_table[b][c] = a -modular_division_table_one_based = [[0]*27 for x in range(27)] -for a in range(27): - for b in range(27): - c = ((a * b)-1) % 26 + 1 - modular_division_table_one_based[b][c] = a - - def sanitise(text): """Remove all non-alphabetic characters and convert the text to lowercase @@ -66,10 +59,10 @@ def every_nth(text, n): """Returns n strings, each of which consists of every nth character, starting with the 0th, 1st, 2nd, ... (n-1)th character - >>> every_nth(string.ascii_lowercase, 5) - ['afkpuz', 'bglqv', 'chmrw', 'dinsx', 'ejoty'] + >>> every_nth(string.ascii_lowercase, 5) + ['afkpuz', 'bglqv', 'chmrw', 'dinsx', 'ejoty'] >>> every_nth(string.ascii_lowercase, 1) - ['abcdefghijklmnopqrstuvwxyz'] + ['abcdefghijklmnopqrstuvwxyz'] >>> every_nth(string.ascii_lowercase, 26) ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'] """ @@ -191,15 +184,10 @@ def affine_encipher_letter(letter, multiplier=1, adder=0, one_based=True): else: alphabet_start = ord('a') letter_number = ord(letter) - alphabet_start - if one_based: - letter_number += 1 - raw_cipher_number = (letter_number * multiplier + adder) - cipher_number = 0 - if one_based: - cipher_number = (raw_cipher_number - 1) % 26 - else: - cipher_number = raw_cipher_number % 26 - return chr(cipher_number + alphabet_start) + if one_based: letter_number += 1 + cipher_number = (letter_number * multiplier + adder) % 26 + if one_based: cipher_number -= 1 + return chr(cipher_number % 26 + alphabet_start) else: return letter @@ -217,15 +205,10 @@ def affine_decipher_letter(letter, multiplier=1, adder=0, one_based=True): else: alphabet_start = ord('a') cipher_number = ord(letter) - alphabet_start - if one_based: - cipher_number += 1 - plaintext_number = 0 - if one_based: - plaintext_number = (modular_division_table_one_based[multiplier][(cipher_number - adder + 26) % 26] - 1) % 26 - else: - #plaintext_number = (modular_division_table[multiplier][cipher_number] - adder) % 26 - plaintext_number = modular_division_table[multiplier][(cipher_number - adder + 26) % 26] - return chr(plaintext_number + alphabet_start) + if one_based: cipher_number += 1 + plaintext_number = modular_division_table[multiplier][(cipher_number - adder) % 26] + if one_based: plaintext_number -= 1 + return chr(plaintext_number % 26 + alphabet_start) else: return letter