X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;f=cipher%2Faffine.py;h=a5647be20e3b30abd5573ac087eac7da1f1f5d2f;hb=HEAD;hp=6ba90e6d1e4976f4d40f7024fc5f1bc10647b17f;hpb=311b300d197536622980f7a837294d8245e326b4;p=cipher-tools.git diff --git a/cipher/affine.py b/cipher/affine.py index 6ba90e6..a5647be 100644 --- a/cipher/affine.py +++ b/cipher/affine.py @@ -1,15 +1,13 @@ -from utilities import * -from language_models import * +from support.utilities import * +from support.language_models import * from logger import logger -modular_division_table = [[0]*26 for _ in range(26)] -for a in range(26): - for b in range(26): - c = (a * b) % 26 - modular_division_table[b][c] = a - - +modular_division_table = { + (multiplier, (multiplier * plaintext) % 26): plaintext + for plaintext in range(26) + for multiplier in range(26) + } def affine_encipher_letter(accented_letter, multiplier=1, adder=0, one_based=True): @@ -22,19 +20,6 @@ def affine_encipher_letter(accented_letter, multiplier=1, adder=0, one_based=Tru for l in string.ascii_letters) 'filoruxadgjmpsvybehknqtwzcFILORUXADGJMPSVYBEHKNQTWZC' """ - # letter = unaccent(accented_letter) - # if letter in string.ascii_letters: - # if letter in string.ascii_uppercase: - # alphabet_start = ord('A') - # else: - # alphabet_start = ord('a') - # letter_number = ord(letter) - 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 letter = unaccent(accented_letter) if letter in string.ascii_letters: letter_number = pos(letter) @@ -58,26 +43,15 @@ def affine_decipher_letter(letter, multiplier=1, adder=0, one_based=True): for l in 'filoruxadgjmpsvybehknqtwzcFILORUXADGJMPSVYBEHKNQTWZC') 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' """ - # if letter in string.ascii_letters: - # if letter in string.ascii_uppercase: - # alphabet_start = ord('A') - # else: - # alphabet_start = ord('a') - # cipher_number = ord(letter) - 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 if letter in string.ascii_letters: cipher_number = pos(letter) if one_based: cipher_number += 1 + # plaintext_number = ( + # modular_division_table[multiplier] + # [(cipher_number - adder) % 26]) plaintext_number = ( - modular_division_table[multiplier] - [(cipher_number - adder) % 26]) + modular_division_table[multiplier, (cipher_number - adder) % 26] + ) if one_based: plaintext_number -= 1 if letter in string.ascii_uppercase: return unpos(plaintext_number).upper()