Advertisement
pvanheus

Untitled

May 10th, 2015
216
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 0.94 KB | None | 0 0
  1. def get_offset(c):
  2.     # uses Python inline if: http://stackoverflow.com/questions/11880430/how-to-write-inline-if-statement-for-print
  3.     return 65 if c.isupper() else 97
  4.    
  5. def encrypt_char(c, key):
  6.     offset = get_offset(c)
  7.     return chr(((ord(c) - offset + key) % 26) + offset)
  8.  
  9. def decrypt_char(c, key):
  10.     offset = get_offset(c)
  11.     ordinal = ord(c) - offset - key + 26 if ((ord(c) - offset) < key) else (ord(c) - offset - key)
  12.     return chr((ordinal % 26) + offset)
  13.  
  14. def vigenere(message, key, encrypt=True):
  15.     op = encrypt_char if encrypt else decrypt_char
  16.     key = [ord(c) - get_offset(c) for c in key]
  17.     def vigenere_helper(message, key_index, ciphertext, op):
  18.         return ciphertext if message == '' else vigenere_helper(message[1:], (key_index + 1) % len(key),
  19.                     ciphertext + (op(message[0], key[key_index]) if message[0].isalpha() else message[0]), op)
  20.     return vigenere_helper(message, 0, '', op)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement