-
Notifications
You must be signed in to change notification settings - Fork 0
/
kryptosVignereDecode.py
56 lines (46 loc) · 2.15 KB
/
kryptosVignereDecode.py
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
__author__ = 'kaz'
#adamkaz@gmail.com
# These functions can be used to decrypt a passage of text, using the vigenere method from sections 1 & 2 of Kryptos
def containsdupes(word_in):
dupe = False
for char in word_in:
if word_in.count(char) > 1:
dupe = True
break
return dupe
def makedictionary(word_in):
#returns a string that begins with word_in, followed by the remaining letters of the alphabet
if containsdupes(word_in) or not word_in.isalpha():
raise Exception('The top word cannot contain any duplicate characters or numbers')
else:
dictionary = word_in
full_alphabet = "abcdefghijklmnopqrstuvwxyz"
for char in full_alphabet:
if char not in dictionary:
dictionary += char
return dictionary
def buildvigeneretable(dictionary, side_word):
table = ['']*side_word.__len__()
for k in range(side_word.__len__()):
table[k]=dictionary[dictionary.find(side_word[k]):]+dictionary[:dictionary.find(side_word[k])]
return table
def decodevigenere(top_word, side_word, encrypted_text):
decrypted_text=''
dictionary=makedictionary(top_word)
table=buildvigeneretable(dictionary, side_word)
side_word_len=side_word.__len__()
side_index=0
for i in range(0,encrypted_text.__len__()):
if '?'==encrypted_text[i]:
decrypted_text += '?'
else:
decrypted_text += dictionary[table[side_index].find(encrypted_text[i])]
side_index += 1
if side_index == side_word_len:
side_index = 0
return decrypted_text
print(decodevigenere('kryptos','palimpsest','EMUFPHZLRFAXYUSDJKZLDKRNSHGNFIVJYQTQUXQBQVYUVLLTREVJYQTMKYRDMFD'.lower()))
print(decodevigenere('kryptos','abscissa','VFPJUDEEHZWETZYVGWHKKQETGFQJNCEGGWHKK?DQMCPFQZDQMMIAGPFXHQRLG\
TIMVMZJANQLVKQEDAGDVFRPJUNGEUNAQZGZLECGYUXUEENJTBJLBQCRTBJDFHRRYIZETKZEMVDUFKSJHKFWHKUWQLSZFTIHHDDDUVH?DWK\
BFUFPWNTDFIYCUQZEREEVLDKFEZMOQQJLTTUGSYQPFEUNLAVIDXFLGGTEZ?FKZBSFDQVGOGIPUFXHHDRKFFHQNTGPUAECNUVPDJMQCLQUM\
UNEDFQELZZVRRGKFFVOEEXBDMVPNFQXEZLGREDNQFMPNZGLFLPMRJQYALMGNUVPDXVKPDQUMEBEDMHDAFMJGZNUPLGEWJLLAETG'.lower()))