-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPlayfair.py
More file actions
80 lines (68 loc) · 3.56 KB
/
Playfair.py
File metadata and controls
80 lines (68 loc) · 3.56 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
'''
@author William Ray Johnson
9/3/2017
'''
import PlayfairTable
class Playfair:
def __init__(self, keyword):
self.table = PlayfairTable.PlayfairTable(keyword)
def splitMessage(self, message):
message = message.lower().replace(" ", "")
splitMessage = ""
for pair in range(len(message)//2):
if message[0] == message[1] and message[0] != "x":
message = message[:1] + "x" + message[1:]
elif message[0] == "x" and message[1] == "x":
message = message[:1] + "q" + message[1:]
splitMessage = splitMessage + message[:2] + " "
message = message[2:]
if len(message) == 1 and message != "x":
splitMessage = splitMessage + message + "x"
elif len(message) == 1 and message == "x":
splitMessage = splitMessage + "xq"
elif len(message) == 2:
splitMessage = splitMessage + message
elif len(message) == 0:
splitMessage = splitMessage.rstrip()
return splitMessage
def encrypt(self, splitMessage):
splitMessageArray = splitMessage.split(" ")
encryptedMessage = ""
for pair in splitMessageArray:
charOneIndex = self.table.getIndex(pair[0])
charTwoIndex = self.table.getIndex(pair[1])
if charOneIndex[0] == charTwoIndex[0]:
encryptedMessage = (encryptedMessage +
self.table.getValue((charOneIndex[0], charOneIndex[1] + 1)) +
self.table.getValue((charTwoIndex[0], charTwoIndex[1] + 1)) +
" ")
elif charOneIndex[1] == charTwoIndex[1]:
encryptedMessage = (encryptedMessage +
self.table.getValue((charOneIndex[0] + 1, charOneIndex[1])) +
self.table.getValue((charTwoIndex[0] + 1, charTwoIndex[1])) +
" ")
else:
encryptedMessage = (encryptedMessage +
self.table.getValue((charOneIndex[0], charTwoIndex[1])) +
self.table.getValue((charTwoIndex[0], charOneIndex[1])) +
" ")
return encryptedMessage.rstrip().upper()
def decrypt(self, encryptedMessage):
encryptedMessageArray = encryptedMessage.lower().split(" ")
decryptedMessage = ""
for pair in encryptedMessageArray:
charOneIndex = self.table.getIndex(pair[0])
charTwoIndex = self.table.getIndex(pair[1])
if charOneIndex[0] == charTwoIndex[0]:
decryptedMessage = (decryptedMessage +
self.table.getValue((charOneIndex[0], charOneIndex[1] - 1)) +
self.table.getValue((charTwoIndex[0], charTwoIndex[1] - 1)))
elif charOneIndex[1] == charTwoIndex[1]:
decryptedMessage = (decryptedMessage +
self.table.getValue((charOneIndex[0] - 1, charOneIndex[1])) +
self.table.getValue((charTwoIndex[0] - 1, charTwoIndex[1])))
else:
decryptedMessage = (decryptedMessage +
self.table.getValue((charOneIndex[0], charTwoIndex[1])) +
self.table.getValue((charTwoIndex[0], charOneIndex[1])))
return decryptedMessage.rstrip()