Lab#5
Implement Hill cipher encryption-decryption. Department of Computer Engineering
Lab#5 Implement Hill cipher encryption-decryption.
Outcome:
Code snippet:
import numpy as np
from sympy import Matrix
Pratikkumar Dungano(92200103236) 14
Lab#5
Implement Hill cipher encryption-decryption. Department of Computer Engineering
def mod_inverse(matrix, mod):
det = int(round([Link](matrix)))
det_inv = pow(det, -1, mod)
adjugate = Matrix(matrix).adjugate()
return [Link](adjugate * det_inv % mod, dtype=int)
def generate_key_matrix(size):
while True:
key = [Link](0, 26, (size, size))
if [Link](int(round([Link](key))), 26) == 1:
return key
def text_to_numbers(text, size):
text = [Link]().replace(" ", "")
while len(text) % size != 0:
text += 'x'
return [ord(char) - ord('a') for char in text]
def numbers_to_text(numbers):
return ''.join(chr(num + ord('a')) for num in numbers)
def hill_encrypt(plaintext, key):
size = [Link][0]
numbers = text_to_numbers(plaintext, size)
encrypted_numbers = []
for i in range(0, len(numbers), size):
block = [Link](numbers[i:i+size]).reshape(size, 1)
encrypted_block = [Link](key, block) % 26
encrypted_numbers.extend(encrypted_block.flatten())
return numbers_to_text(encrypted_numbers)
def hill_decrypt(ciphertext, key):
size = [Link][0]
numbers = text_to_numbers(ciphertext, size)
key_inv = mod_inverse(key, 26)
decrypted_numbers = []
for i in range(0, len(numbers), size):
block = [Link](numbers[i:i+size]).reshape(size, 1)
decrypted_block = [Link](key_inv, block) % 26
decrypted_numbers.extend(decrypted_block.flatten())
return numbers_to_text(decrypted_numbers)
def main():
print("Welcome to the Hill Cipher Program!")
key_size = 2 # Default to a 2x2 matrix
Pratikkumar Dungano(92200103236) 15
Lab#5
Implement Hill cipher encryption-decryption. Department of Computer Engineering
key = generate_key_matrix(key_size)
print("Generated Key Matrix:")
print(key)
while True:
print("\nOptions:")
choice = input("(e)ncrypt, (d)ecrypt, (r)egenerate key, or (s)top?\n").lower()
if choice == 's':
print("Exiting the program. Goodbye!")
break
elif choice == 'r':
key = generate_key_matrix(key_size)
print("New Key Matrix:")
print(key)
elif choice == 'e':
plaintext = input("Enter the plaintext: ")
result = hill_encrypt(plaintext, key)
print("Ciphertext:", result)
elif choice == 'd':
ciphertext = input("Enter the ciphertext: ")
result = hill_decrypt(ciphertext, key)
print("Decrypted Text:", result)
else:
print("Invalid choice. Please enter 'e', 'd', 'r', or 's'.")
if __name__ == "__main__":
main()
Pratikkumar Dungano(92200103236) 16