необходимо решить задачу по применению pygost в python
Задание по расшифровке базового сообщения
Задача: Расшифруйте сообщение A3D9F1C8B0E5A3D9
(hex), зашифрованное по ГОСТ 28147-89 в режиме простой замены. Ключ: 4E921FA57B30C8D94E921FA57B30C8D9
(32 байта).
Теория: ГОСТ использует 64-битные блоки и 256-битные ключи. Дешифрование требует обратного порядка подключей.
Подсказки:
- Используйте библиотеку
pygost
. - Дополнение открытого текста — нулевые байты.
Решение:
from pygost import gost3412
key = bytes.fromhex("4E921FA57B30C8D94E921FA57B30C8D9")
ciphertext = bytes.fromhex("A3D9F1C8B0E5A3D9")
decrypted = gost3412.ECB(key).decrypt(ciphertext)
print(decrypted.decode()) # Ответ: HELLOW\x00\x00
Есть проблемы с нахождением и установкой нужной версии библиотеки (для выполнения использую версию с репозитория mosquito) и выборе метода. Преподаватель утверждает что код, метод (Магма из госта 3412), ключ и шифр являются верными и как минимум 3 человека смогли верно решить задачу. Были попытки подгонять ответы под разные стандарты, например:
- Поменять метод ECB(key) на GOST3412Magma(key) который есть в библиотеке. Ошибка
bytearray index out of range
- Импортировать ГОСТ 28147 для метода ECB, но в ECB надо передать еще один аргумент которого у нас нет.
Преподаватель требует для выполнения использовать метод Магма
и именно библиотеку pygost
. Как этого достичь преподаватель не объяснил и не объяснит.
Ответы (1 шт):
В вашем вопросе вопросов больше, чем вы думаете.
Во-первых, что такое "библиотека pygost
"? То, что лежит в PyPy
- просто заглушка без кода. При попытке установить pip install pygost
выбрасывает исключение RuntimeError: You are trying to install a stub package pygost. Maybe you are using the wrong pypi?
Я взял pygost
из гугла: https://github.com/mosquito/pygost
Но там другие интерфейсы.
Откуда вы взяли ту библиотеку, для которой написан ваш пример?
Во-вторых, невооруженным глазом видно, что коль скоро от вас требуют ГОСТ 28147-89
, то from pygost import gost3412
здесь точно не подходит. Доложно быть что-то вроде from pygost import gost28147
В-третьих и в главных, вас явно обманули составители задания, написав Ключ: 4E921FA57B30C8D94E921FA57B30C8D9 (32 байта). Вы удивитесь, но строка из 32-х букв задаёт 16 байтов. В вашем ключе не хватает ещё 32-х шестнадцатиричных цифр. Поэтому ваша задача принципиально неразрешима - крайне маловероятно подобрать недостающие 16 байтов ключа за оставшееся время существования вселенной.
Исправьте ваш вопрос:
- укажите детали установки библиотеки
pygost
- и приведите правильный 32-х байтовый ключ.