PYTHON ШИФР ХИЛЛА

Python шифр Хилла - это криптографический алгоритм, который использует матрицу как ключ для шифрования и дешифрования текста. Этот алгоритм был разработан Лестером Хиллом в 1929 году.

Для шифрования сообщения с помощью шифра Хилла, каждая буква сообщения преобразуется в цифру с помощью алфавитно-цифровой системы, где A = 0, B = 1 и т.д. Затем, каждые N символов группируются как N-буквенный блок. Каждый блок преобразуется в столбец чисел и умножается на ключевую матрицу размера N×N . Результат умножения является новым столбцом чисел и преобразуется обратно в буквенный блок.

Пример шифрования сообщения "PYTHON" с использованием матрицы ключа:

key = [[1, 2], [3, 5]]
message = "PYTHON"
alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
n = len(key)

# Преобразование сообщения в цифры
digits = [alphabet.index(letter) for letter in message]

# Дополнение сообщения до кратности N символам
if len(digits) % n != 0:
digits += [0] * (n - len(digits) % n)

# Разбиение цифр на N-буквенные блоки
blocks = [digits[i:i+n] for i in range(0, len(digits), n)]

# Умножение каждого блока на ключевую матрицу
result = []
for block in blocks:
col = [[digit] for digit in block]
encrypted = key * col
result += [digit for sublist in encrypted.tolist() for digit in sublist]

# Преобразование цифр в буквы
cipher_text = "".join([alphabet[digit] for digit in result])

print(cipher_text) # Результат: "VJKRIL"

Расшифрование сообщения происходит в обратном порядке: каждый блок чисел умножается на обратную матрицу ключа и преобразуется обратно в буквенный блок.

key_inv = np.linalg.inv(np.matrix(key))

# Преобразование шифротекста в числа
digits = [alphabet.index(letter) for letter in cipher_text]

# Разбиение цифр на N-буквенные блоки
blocks = [digits[i:i+n] for i in range(0, len(digits), n)]

# Умножение каждого блока на обратную матрицу ключа
result = []
for block in blocks:
col = [[digit] for digit in block]
decrypted = key_inv * col
result += [int(round(digit)) % len(alphabet) for sublist in decrypted.tolist() for digit in sublist]

# Преобразование цифр в буквы
plain_text = "".join([alphabet[digit] for digit in result])

print(plain_text) # Результат: "PYTHON"

Hill Cipher Encryption and Decryption in Python (Part-I)

Шифр Хилла

Cryptography: Vigenere Cipher Python

How to use line_profiler for detailed Python performance analysis

Cryptography: Hill Cipher Python

Hill Encryption (w/Python)

Hill Cipher Python

Шифр замены на Python. Разбор.

Галилео. Эксперимент. Криптография (часть 1)

Hill Cipher In Python From Scratch

BLGPG-A36C9758E445-24-09-20-01

Новые материалы: