1. Пользуйтесь тегами кода. - [code] ... [/code] 2. Точно указывайте язык, название и версию компилятора (интерпретатора). 3. Название темы должно быть информативным. В описании темы указываем язык!!!
Здравствуйте! Требуется реализовать алгоритм блочного шифрования ГОСТ 28147-89 в следующих режимах шифрования: режим простой замены; режим гаммирования; режим гаммирования с обратной связью. Программа должна запрашивать имя входного и выходного файлов, ключ, вектор инициализации (синхропосылку), режим работы (зашифрование или расшифрование), режим шифрования.
У меня прежде всего вопрос по организации данных.. В соответствии с алгоритмом
размер блока – 64 бита; - размер ключа – 256 бит. Ключ представляется как массив из восьми 32-битных подключей K={K0,K1,…,K7}; - количество S-блоков – 8. Каждый S-блок (в терминах стандарта – узел замены) содержит 16 четырехбитных значений, представляющих собой произвольную перестановку чисел от 0 до 15. Совокупность всех S-блоков можно представить в виде матрицы (таблицы замен) размером 8 на 16.
Скажите пожалуйста, какие типы правильнее использовать для массива ключей и таблицы замен?
Так... А вот теперь я разбирался со всеми функциями. И вот что удалось сделать:
1) не работай со знаковыми __int64, везде придется поменять этот тип на unsigned __int64... 2) в некоторых местах я убрал заведомо лишние действия, и добавил явные приведения типов там, где без них могут быть проблемы... 3) самое главное: в функции BaseStep ты делаешь:
Цитата
helpS=helpS<<11;
- это совершенно неверно. В твоем документа ясно сказано, что сдвиг должен быть циклическим, т.е., выталкиваемый слева бит становится крайним справа. Это тоже поправил... 4) Ну, по мелочам: сделал локальные переменные в циклах, убрал неиспользуемые массивы и переменные, при чтении из зашифрованного файла проверяю значение, возвращаемое fread, иначе в расшифрованный файл записывается 8 байт мусора. Вот что получилось в итоге: