Last active
January 26, 2021 10:40
-
-
Save jon1scr/1e0df9c2c12270c3bbba727aafb5f85e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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