Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2012, 11:31   #1
seregasumrak
Новичок
Джуниор
 
Регистрация: 12.12.2012
Сообщений: 1
По умолчанию Криптография

Прошу помочь в написании домашнего задания по алгоритмическим языкам, мыслей нет совершенно, но сдать очень нужно, иначе армия! заранее всем спасибо!
1)
Разработать программу для реализации алгоритма шифрования и расшифрования данных, используя метод гаммирования и поразрядного циклического сдвига. Алгоритм: для блока данных заданного размера берется такого же размера фрагмент гаммы и выполняется операция поразрядного исключающего «ИЛИ», далее, выполняется операция поразрядного циклического сдвига на заданное число бит влево или вправо с полученным новым блоком. Расшифрование выполняется в обратном порядке, вначале циклический сдвиг в противоположную сторону, а затем операция поразрядного исключающего «ИЛИ» с блоками той же самой гаммы.
Для получения гаммы можно использовать стандартный генератор псевдослучайный чисел (функцию rand, функция rand() генерирует воспроизводимую последовательность псевдослучайных чисел, при каждом обращении к функции возвращается целое в интервале между нулем и значением RAND_MAX, которое в любой реализации должно быть не меньше числа 32767, обратить внимание, при величине обрабатываемого блока данных 4 байта, возможно, для заполнения блока гаммы использовать два вызова функции), для начальной инициализации генератора использовать функцию srand (значение начальной инициализации является частью секретного ключа, другой частью ключа является размер поразрядного сдвига и его направление). Шифруемые данные хранить в программе в виде строки (можно сохранять в файле и читать из файла).
условия: Циклический сдвиг влево; Величина сдвига в битах равна 2; Размер обрабатываемого блока данных равен 4 байтам

2)
Используя результаты, полученные в пункте (1), разработать оконное Win32 приложение, содержащее главное окно с меню, реализующее функции простейшего текстового редактора с функциями криптозащиты. Основные реализуемые функции: ввод текста в одну строку, перерисовка текста, ввод секретного пароля (значение для инициализации генератора псевдослучайных чисел), сохранение зашифрованного текста в файле, чтение зашифрованного текста из файла. Дополнительные функции (оцениваются дополнительными баллами): ввод текста в несколько строк, использование полос прокрутки, использование диалоговых окон «Открыть файл», «Сохранить файл» и др.

seregasumrak вне форума Ответить с цитированием
Старый 12.12.2012, 11:53   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
другой частью ключа является размер поразрядного сдвига и его направление
Спорное решение. Ну да ладно.

1) Напишите функцию EncryptRound, которая принимает три 32-битных числа, и делает XOR первых двух, а затем циклический сдвиг на третье влево, если третье число положительно и вправо на минус третье, если оно отрицательно и возвращает результат.
2) Напишите функцию Encrypt, которая принимает блок текста, его размер и два 32-битных числа (инициализатор и сдвиг). Пусть она вызывает srand(инициализатор), создаёт новый "выходной" блок памяти того же размера (если размер не кратен 4, следует увеличить его до кратного 4), после чего в цикле берёт из переданного блока памяти очередные 4 байта, интерпретируя их как число, создаёт число "ключа" одним или несколькими последовательными вызовами rand() (пусть пока одним), вызывает EncryptRound((число из блока памяти), (ключ), (сдвиг)) и записывает возвращаемое значение в соответствующее место выходного блока. Encrypt возвращает выходной блок.
3) Напишите функцию DecryptRound, "обратную" EncryptRound (те же аргументы; выполняется сдвиг в противоположную сторону, затем XOR).
4) Напишите функцию Decrypt, во всём аналогичную Encrypt, кроме того, что она вызывает DecryptRound, а не EncryptRound.
Abstraction вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Криптография бд Гроб Помощь студентам 1 20.05.2012 19:36
криптография Kukurudza Общие вопросы C/C++ 1 11.09.2011 11:32
Криптография Shurik(c) Помощь студентам 1 13.06.2011 13:27
Криптография metallist85 Общие вопросы Delphi 5 28.10.2010 09:30
Криптография helpme Помощь студентам 8 10.11.2007 14:43