Can now do frequency analysis
[cipher-tools.git] / cipher.py
1 import string
2 import collections
3
4
5 def caesar_cipher_letter(letter, shift):
6 if letter in string.ascii_letters:
7 if letter in string.ascii_lowercase:
8 return chr((ord(letter) - ord('a') + shift) % 26 + ord('a'))
9 else:
10 new_letter = letter.lower()
11 yolo = chr((ord(new_letter) - ord('a') + shift) % 26 + ord('a'))
12 return yolo.upper()
13 else:
14 return letter
15
16 def caesar_decipher_letter(letter, shift):
17 return caesar_cipher_letter(letter, -shift)
18
19 def caesar_cipher_message(message, shift):
20 big_cipher = [caesar_cipher_letter(l, shift) for l in message]
21 return ''.join(big_cipher)
22
23 def caesar_decipher_message(message, shift):
24 return caesar_cipher_message(message, -shift)
25
26 def letter_frequencies(message):
27 frequencies = collections.defaultdict(int)
28 for letter in message:
29 if letter in string.ascii_letters:
30 frequencies[letter.lower()]+=1
31 return frequencies
32