Skip to content

Instantly share code, notes, and snippets.

@jon1scr
Last active January 26, 2021 10:40
Show Gist options
  • Save jon1scr/1e0df9c2c12270c3bbba727aafb5f85e to your computer and use it in GitHub Desktop.
Save jon1scr/1e0df9c2c12270c3bbba727aafb5f85e to your computer and use it in GitHub Desktop.
import sys, numpy as np
def cipher_encryption():
msg = input('Enter message: ').upper()
msg = msg.replace(' ', '')
len_chk = 0
if len(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
for i in range(len(msg)):
if i % 2 == 0:
msg2d[0][itr1] = int(ord(msg[i]) - 65)
itr1 += 1
else:
msg2d[1][itr2] = int(ord(msg[i]) - 65)
itr2 += 1
else:
key = input('Enter 4 letter Key String: ').upper()
key = key.replace(' ', '')
key2d = np.zeros((2, 2), dtype=int)
itr3 = 0
for i in range(2):
for j in range(2):
key2d[i][j] = ord(key[itr3]) - 65
itr3 += 1
else:
deter = key2d[0][0] * key2d[1][1] - key2d[0][1] * key2d[1][0]
deter = deter % 26
mul_inv = -1
for i in range(26):
temp_inv = deter * i
if temp_inv % 26 == 1:
mul_inv = i
break
continue
continue
else:
if mul_inv == -1:
print('Invalid key')
sys.exit()
encryp_text = ''
itr_count = int(len(msg) / 2)
if len_chk == 0:
for i in range(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:
for i in range(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)
else:
print('Encrypted Text: {}'.format(encryp_text))
def cipher_decryption():
msg = input('Enter message: ').upper()
msg = msg.replace(' ', '')
len_chk = 0
if len(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
for i in range(len(msg)):
if i % 2 == 0:
msg2d[0][itr1] = int(ord(msg[i]) - 65)
itr1 += 1
else:
msg2d[1][itr2] = int(ord(msg[i]) - 65)
itr2 += 1
else:
key = input('Enter 4 letter Key String: ').upper()
key = key.replace(' ', '')
key2d = np.zeros((2, 2), dtype=int)
itr3 = 0
for i in range(2):
for j in range(2):
key2d[i][j] = ord(key[itr3]) - 65
itr3 += 1
else:
deter = key2d[0][0] * key2d[1][1] - key2d[0][1] * key2d[1][0]
deter = deter % 26
mul_inv = -1
for i in range(26):
temp_inv = deter * i
if temp_inv % 26 == 1:
mul_inv = i
break
continue
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
for i in range(2):
for j in range(2):
key2d[i][j] *= mul_inv
else:
for i in range(2):
for j in range(2):
key2d[i][j] = key2d[i][j] % 26
else:
decryp_text = ''
itr_count = int(len(msg) / 2)
if len_chk == 0:
for i in range(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:
for i in range(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)
else:
print('Decrypted Text: {}'.format(decryp_text))
def main():
choice = int(input('1. Encryption\n2. Decryption\nChoose(1, 2): '))
if choice == 1:
print('---Encryption---')
cipher_encryption()
else:
if choice == 2:
print('---Decryption---')
cipher_decryption()
else:
print('Invalid Choice')
if __name__ == '__main__':
main()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment