Files
lab_encryption/caesar_cracker.py
zoeyande2 4fc2cfe227 Finished checkpoint 2
1. Writing my own code definitely helped me understand the problem better. It was kind of lucky that the most common character in each of the secret texts was in fact " ". It made me understand the work that the cipher is doing better.
2. I watched like 3 different youtube videos about the Kasiski examination process after reading the wiki page. I quickly used "the" to get a difference to the next "the" that mapped the same as 42, so I knew the keyword had to be a multiple of 2,3, or 7. I tried the process with 3 and got nowhere, so I tried it with 6 on a whim. I got the first two letters of the code to be PY, then I couldn't figure out the third so I skipped it, and got the 4th letter to be H, so I made the guess that the keyword was PYTHON and I was right!
2026-03-31 19:29:44 -04:00

49 lines
1.2 KiB
Python

from easybits import Bits
from collections import Counter
from ciphers.caesar import CaesarCipher
def crack_caesar(ciphertext):
fulltext = ''
with open(ciphertext,"r") as text:
for line in text:
cleanline = line.strip()
for char in cleanline:
fulltext += char
counter = Counter(fulltext)
countdict = dict(counter)
print(countdict)
maximum = max(countdict.values())
target = ''
for char in countdict:
if countdict[char] == maximum:
target = char
diff = Bits(target,8).int - Bits(" ",8).int
cipher = CaesarCipher(diff)
decryptedtext = cipher.decrypt(fulltext) #I included this part to double check that the function works
return diff, decryptedtext
def polyalpha_helper(text): #used to help crack the code!
groups = [[],[],[],[],[],[]]
for i in range(len(text)):
for n in range(6):
if i%6 == n:
groups[n].append(text[i])
groupmax = []
for alist in groups:
counter = dict(Counter(alist))
sorter = sorted(counter.items(), key=lambda item: item[1], reverse = True)
max = sorter[0]
groupmax.append(max)
print(groupmax)