![]() |
1. Пользуйтесь тегами кода. - [code] ... [/code]
2. Точно указывайте язык, название и версию компилятора (интерпретатора).
3. Название темы должно быть информативным.
В описании темы указываем язык!!!
![]() |
18192123 |
![]()
Сообщение
#1
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 920 Пол: Женский Реальное имя: Марина Репутация: ![]() ![]() ![]() |
Здравствуйте!
Требуется реализовать алгоритм блочного шифрования ГОСТ 28147-89 в следующих режимах шифрования: режим простой замены; режим гаммирования; режим гаммирования с обратной связью. Программа должна запрашивать имя входного и выходного файлов, ключ, вектор инициализации (синхропосылку), режим работы (зашифрование или расшифрование), режим шифрования. У меня прежде всего вопрос по организации данных.. В соответствии с алгоритмом размер блока – 64 бита; - размер ключа – 256 бит. Ключ представляется как массив из восьми 32-битных подключей K={K0,K1,…,K7}; - количество S-блоков – 8. Каждый S-блок (в терминах стандарта – узел замены) содержит 16 четырехбитных значений, представляющих собой произвольную перестановку чисел от 0 до 15. Совокупность всех S-блоков можно представить в виде матрицы (таблицы замен) размером 8 на 16. Скажите пожалуйста, какие типы правильнее использовать для массива ключей и таблицы замен? |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата какие типы правильнее использовать для массива ключей и таблицы замен? Язык - С++, как видно? Тогда тебе нельзя привязываться к размеру конкретного типа, а единственный тип, который имеет одинаковый размер везде - это char. Там что или описывай все в байтах:typedef unsigned char Tsubkey[4]; // 32 bit, или делай так: typedef bool Tsubkey[32];(представляй каждый элемент типа Tsubkey отдельным битом...) В первом случае будет меньше размер, занимаемый данными. Во втором - размер (возможно) будет больше (если компилятор не оптимизирует), но зато будет очень быстрый доступ к битам, причем можно будет элементарно "убрать" разницу между little-endian и big-endian. Все вышесказанное можешь не принимать во внимание, если твоя задача - реализовать это под строго заданным компилятором и под одной аппаратной платформой. Тогда можешь выбирать, что тебе больше нравится - работать с битами внутри байта, или работать с bool-ами и потом "собирать" байты из них. Я бы все-таки выбрал второй вариант... Аналогично и с узлами замены. |
![]() ![]() |
![]() |
Текстовая версия | 18.07.2025 10:38 |