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
Новые материалы:
- Как проверить запущен ли процесс python
- Асинхронные запросы python
- Метод гаусса python
- Python несколько графиков на одном
- Как из одной функции передать переменную в другую python
- Python 2 урок
- Python import telebot не работает
- Паттерн команда python
- Презентация цикл for python
- Программы на python для начинающих простые
- Написанные программы на python
- Дан список выведите те его элементы которые встречаются в списке только один раз python