forked from sumedha3111/Python-for-Beginners
- Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhillcipher.py
More file actions
Latest commit
100 lines (100 loc) · 3.33 KB
/
Copy pathhillcipher.py
File metadata and controls
100 lines (100 loc) · 3.33 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
importsys
importnumpyasnp
defcipher_encryption():
msg=input("Enter message: ").upper() msg=msg.replace(" ", "")
len_chk=0
iflen(msg) %2!=0:
msg+="0"len_chk=1
row=2
col=int(len(msg)/2)
msg2d=np.zeros((row, col), dtype=int) itr1=0
itr2=0
foriinrange(len(msg)):
ifi%2==0:
msg2d[0][itr1] =int(ord(msg[i])-65) itr1+=1
else:
msg2d[1][itr2] =int(ord(msg[i])-65) itr2+=1
key=input("Enter 4 letter Key String: ").upper() key=key.replace(" ", "")
key2d=np.zeros((2, 2), dtype=int)
itr3=0
foriinrange(2):
forjinrange(2):
deter=deter=
key2d[i][j] =ord(key[itr3])-65itr3+=1
key2d[0][0] *key2d[1][1] -key2d[0][1] *key2d[1][0] deter%26
mul_inv
foriinrange(26):
temp_inv=deter*iiftemp_inv%26==1:
mul_inv=ibreak
else:
continue
ifmul_inv==-1: print("Invalid key") sys.exit()
encryp_text=""
itr_count=int(len(msg)/2) iflen_chk==0:
foriinrange(itr_count):
temp1=msg2d[0][i] *key2d[0][0] +msg2d[1][i] *key2d[0][1] encryp_text+=chr((temp1%26) +65)
temp2=msg2d[0][i] *key2d[1][0] +msg2d[1][i] *key2d[1][1] encryp_text+=chr((temp2%26) +65)
else:
foriinrange(itr_count-1):
temp1=msg2d[0][i] *key2d[0][0] +msg2d[1][i] *key2d[0][1] encryp_text+=chr((temp1%26) +65)
temp2=msg2d[0][i] *key2d[1][0] +msg2d[1][i] *key2d[1][1] encryp_text+=chr((temp2%26) +65)
print("Encrypted Text: {}".format(encryp_text))
defcipher_decryption():
msg=input("Enter message: ").upper() msg=msg.replace(" ", "")
len_chk=0
iflen(msg) %2!=0:
msg+="0"
len_chk=1row=2
col=int(len(msg) /2)
msg2d=np.zeros((row, col), dtype=int) itr1=0
itr2=0
foriinrange(len(msg)):
ifi%2==0:
msg2d[0][itr1] =int(ord(msg[i]) -65) itr1+=1
else:
msg2d[1][itr2] =int(ord(msg[i]) -65) itr2+=1
key=input("Enter 4 letter Key String: ").upper() key=key.replace(" ", "")
key2d=np.zeros((2, 2), dtype=int)
itr3=0
foriinrange(2):
forjinrange(2):
key2d[i][j] =ord(key[itr3]) -65
itr3+=1
deter=key2d[0][0] *key2d[1][1] -key2d[0][1] *key2d[1][0]
deter=deter%26
mul_inv
foriinrange(26):
=-1
temp_inv=deter*iiftemp_inv%26==1:
mul_inv=i
breakelse:
continue
key2d[0][0], key2d[1][1] =key2d[1][1], key2d[0][0] key2d[0][1] *=-1
key2d[1][0] *=-1
key2d[0][1] =key2d[0][1] %26
key2d[1][0] =key2d[1][0] %26
foriinrange(2):
forjinrange(2):
key2d[i][j] *=mul_invforiinrange(2):
forjinrange(2):
key2d[i][j] =key2d[i][j] %26
decryp_text=""
itr_count=int(len(msg) /2) iflen_chk==0:
foriinrange(itr_count):
temp1=msg2d[0][i] *key2d[0][0] +msg2d[1][i] *key2d[0][1] decryp_text+=chr((temp1%26) +65)
temp2=msg2d[0][i] *key2d[1][0] +msg2d[1][i] *key2d[1][1] decryp_text+=chr((temp2%26) +65)
else:
foriinrange(itr_count-1):
temp1=msg2d[0][i] *key2d[0][0] +msg2d[1][i] *key2d[0][1] decryp_text+=chr((temp1%26) +65)
temp2=msg2d[0][i] *key2d[1][0] +msg2d[1][i] *key2d[1][1] decryp_text+=chr((temp2%26) +65)
print("Decrypted Text: {}".format(decryp_text)) defmain():
z=0
while(z==0):
choice=int(input("1. Encryption\n2. Decryption\n3.Exit\n Choose: ")) ifchoice==1:
print("---Encryption---")
cipher_encryption() elifchoice==2:
print("---Decryption---")
cipher_decryption() elifchoice==3:
z=1else:
print("Invalid Choice")
if__name__=="__main__": main()