Untitled

mail@pastecode.io avatar
unknown
plain_text
a year ago
2.1 kB
1
Indexable
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)