Untitled
unknown
plain_text
a year ago
2.1 kB
1
Indexable
Never
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)