-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcipherer.py
More file actions
109 lines (77 loc) · 3.73 KB
/
cipherer.py
File metadata and controls
109 lines (77 loc) · 3.73 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
def EncodeCaesar(message, shift):
shift %= 26
encodedMessage = list(message)
for index, letter in enumerate(message):
if letter.islower():
encodedASCII = ord(encodedMessage[index]) + shift - ord("a")
encodedMessage[index] = chr(encodedASCII % 26 + ord("a"))
elif letter.isupper():
encodedASCII = ord(encodedMessage[index]) + shift - ord("A")
encodedMessage[index] = chr(encodedASCII % 26 + ord("A"))
return "".join(encodedMessage)
def DecodeCaesar(encodedMessage, knownWord):
message = "Not found"
for char in encodedMessage:
if not char.isalpha() and char != " ":
encodedMessage.replace(char, "")
encodedWords = encodedMessage.lower().split()
for i in range(1, 26):
for word in encodedWords:
testWord = EncodeCaesar(word, i)
if knownWord.lower() == testWord:
print("Shift:", 26 - i)
message = EncodeCaesar(encodedMessage, i)
return message
def EncodeVigenere(message, key):
keys = list(key.lower())
encodedMessage = list(message)
offset = 0
for index, letter in enumerate(message):
if letter.islower():
encodedASCII = ord(encodedMessage[index]) - ord("a")
encodedASCIIKey = ord(keys[(index - offset) % len(keys)]) - ord("a")
encodedMessage[index] = chr((encodedASCII + encodedASCIIKey) % 26 + ord("a"))
elif letter.isupper():
encodedASCII = ord(encodedMessage[index]) - ord("A")
encodedASCIIKey = ord(keys[(index - offset) % len(keys)]) - ord("a")
encodedMessage[index] = chr((encodedASCII + encodedASCIIKey) % 26 + ord("A"))
else:
offset += 1
return "".join(encodedMessage)
def DecodeVigenere(message, key):
keys = list(key.lower())
encodedMessage = list(message)
offset = 0
for index, letter in enumerate(message):
if letter.islower():
encodedASCII = ord(encodedMessage[index]) - ord("a")
encodedASCIIKey = ord(keys[(index - offset) % len(keys)]) - ord("a")
encodedMessage[index] = chr((encodedASCII - encodedASCIIKey) % 26 + ord("a"))
elif letter.isupper():
encodedASCII = ord(encodedMessage[index]) - ord("A")
encodedASCIIKey = ord(keys[(index - offset) % len(keys)]) - ord("a")
encodedMessage[index] = chr((encodedASCII - encodedASCIIKey) % 26 + ord("A"))
else:
offset += 1
return "".join(encodedMessage)
action = ""
while action != "q":
action = input("Would you like to quit, encode, or decode? (q, e, d): ")
if action == "e":
cipher = input("What cipher would you like to use? (c for caesar, v for vigenere): ")
message = input("Enter the message you would like to encode: ")
if cipher == "c":
shift = int(input("Enter the shift of the cipher: "))
print("Encoded Message:", EncodeCaesar(message, shift))
elif cipher == "v":
key = input("Enter the key you would like to use: ")
print("Encoded Message:", EncodeVigenere(message, key))
elif action == "d":
cipher = input("What cipher would you like to use? (c for caesar, v for vigenere): ")
encoded_message = input("Enter the encoded message: ")
if cipher == "c":
knownWord = input("Enter a known word: ")
print("Decoded Message:", DecodeCaesar(encoded_message, knownWord))
elif cipher == "v":
key = input("Enter the key of the cipher: ")
print("Decoded Message:", DecodeVigenere(encoded_message, key))