-
Notifications
You must be signed in to change notification settings - Fork 1
/
simpleSubCipher.py
60 lines (47 loc) · 1.82 KB
/
simpleSubCipher.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
57
58
59
60
import sys, random
LETTERS = 'ABCEDFGHIJKLMNOPQRSTUVWXYZ'
def main():
myMessage = 'If a man is offered a fact which goes against his instincts, he will scrutinize it closely, and unless the evidence is overwhelming, he will refuse to believe it. If, on the other hand, he is offered something which affords a reason for acting in accordance to his instincts, he will accept it even on the slightest evidence. The origin of myths is explained in this way. -Bertrand Russell'
myKey = 'LFWOAYUISVKMNXPBDCRJTQEGHZ'
myMode = 'encrypt'
checkValidKey(myKey)
if myMode == 'encrypt':
translated = encryptMessage(myKey,myMessage)
elif myMode == 'decrypt':
tranlated = decryptMessage(myKey,myMessage)
print('Using key %s' % myKey)
print('The %sed message is: ' % myMode)
print(translated)
def checkValidKey(key):
keyList = list(key)
lettersList = list(LETTERS)
keyList.sort()
lettersList.sort()
if keyList != lettersList:
sys.exit('There is an error in the key or symbol set.')
def encryptMessage(key,message):
return translateMessage(key,message,'encrypt')
def decryptMessage(key,message):
return translateMessage(key,message,'decrypt')
def translateMessage(key,message,mode):
translated = ''
charsA = LETTERS
charsB = key
if mode == 'decrypt':
charsA,charsB = charsB,charsA
for symbol in message:
if symbol.upper() in charsA:
symIndex = charsA.find(symbol.upper())
if symbol.isupper():
translated += charsB[symIndex].upper()
else:
translated += charsB[symIndex].lower()
else:
translated += symbol
return translated
def getRandomKey():
key = list(LETTERS)
random.shuffle(key)
return ''.join(key)
if __name__ == '__main__':
main()