projects
/
cipher-tools.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Updated for posting affine ciphers on blog
[cipher-tools.git]
/
cipher
/
affine.py
diff --git
a/cipher/affine.py
b/cipher/affine.py
index 8a9e5845a1afb784d0b1ee607a5a31dd5ce7d1e3..9c521b94e2385bc4292c1519a3b8a75c7be9263e 100644
(file)
--- a/
cipher/affine.py
+++ b/
cipher/affine.py
@@
-3,13
+3,19
@@
from support.language_models import *
from logger import logger
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 = [[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):
def affine_encipher_letter(accented_letter, multiplier=1, adder=0, one_based=True):
@@
-75,9
+81,12
@@
def affine_decipher_letter(letter, multiplier=1, adder=0, one_based=True):
if letter in string.ascii_letters:
cipher_number = pos(letter)
if one_based: cipher_number += 1
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 = (
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()
if one_based: plaintext_number -= 1
if letter in string.ascii_uppercase:
return unpos(plaintext_number).upper()