import numpy as np
# Fungsi untuk mendapatkan matriks invers modulo 26 (hanya bekerja untuk 2x2)
def inverse_matrix(matrix):
det = (matrix[0, 0] * matrix[1, 1] - matrix[0, 1] * matrix[1, 0]) % 26
det_inv = None
for i in range(26):
if (det * i) % 26 == 1:
det_inv = i
break
if det_inv is None:
raise ValueError("Determinan tidak memiliki invers modulo 26")
inverse = np.array([
[matrix[1, 1], -matrix[0, 1]],
[-matrix[1, 0], matrix[0, 0]]
])
return (det_inv * inverse) % 26
# Fungsi untuk mengenkripsi pesan
def encrypt(message, key_matrix):
message = message.replace(" ", "").upper()
if len(message) % 2 != 0:
message += 'X'
encrypted_message = ''
for i in range(0, len(message), 2):
pair = message[i:i+2]
pair_matrix = np.array([[ord(pair[0]) - ord('A')], [ord(pair[1]) - ord('A')]])
result_matrix = np.dot(key_matrix, pair_matrix) % 26
encrypted_pair = ''.join([chr(result_matrix[i, 0] + ord('A')) for i in range(2)])
encrypted_message += encrypted_pair
return encrypted_message
# Fungsi untuk mendekripsi pesan
def decrypt(encrypted_message, key_matrix):
decrypted_message = ''
for i in range(0, len(encrypted_message), 2):
pair = encrypted_message[i:i+2]
pair_matrix = np.array([[ord(pair[0]) - ord('A')], [ord(pair[1]) - ord('A')]])
key_inverse = inverse_matrix(key_matrix)
result_matrix = np.dot(key_inverse, pair_matrix) % 26
decrypted_pair = ''.join([chr(result_matrix[i, 0] + ord('A')) for i in range(2)])
decrypted_message += decrypted_pair
return decrypted_message
# Contoh penggunaan
key_matrix = np.array([[3, 5], [7, 2]]) # Ganti dengan matriks kunci Anda sendiri
pesan = "HELLO WORLD"
pesan_terenkripsi = encrypt(pesan, key_matrix)
pesan_terdekripsi = decrypt(pesan_terenkripsi, key_matrix)
print("Pesan Asli:", pesan)
print("Pesan Terenkripsi:", pesan_terenkripsi)
print("Pesan Terdekripsi:", pesan_terdekripsi)