![]() |
|
Модераторы: bsa |
![]()
|
|
| Regina90 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 4.11.2010 Репутация: нет Всего: нет |
Пожалуйста,помогите необходимо Реализовать функции шифрации и дешифрации текстового файла по схеме Фейштеля(Фейстеля). Программу необходимо реализовать в С++ Builder.я поняла что весь текст нужно разделить на блоки...блоки размером n, где n-четное...затем каждый блок разделить на 2 части...и затем над каждым блоком производить действия!Но как это сделать...я не знаю,..как вообще его разбить на блоки побайтно((((аааа...помогите плиз!!!!!Буду, благодарна за любую информацию...код...направьте меня))как это сделать...препод вообще не объясняет!!!!
|
|||
|
||||
| Bugmaker |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 161 Регистрация: 27.6.2008 Репутация: нет Всего: нет |
Ну так это... Читаем текст из файла\memo\edit либо другого контрола.
Выбираем размерность N. Далее делим длину текста, на N и получаем количество блоков. Создаем двумерный массив, записываем в него все блоки, если нужно деля их на 2. допустим если текст в memo String sText=memo1->Text; int n=2; int countOfBlocks=sizeof(sText)/n; и так далее по тексту. Что конкретно не поулчится - спрашивай. Билдера под рукой нет. И напишите, что такое схема Фейштеля. Может быть все гораздо проще. Это сообщение отредактировал(а) Bugmaker - 4.11.2010, 08:53 |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
||||
|
||||
| Regina90 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 4.11.2010 Репутация: нет Всего: нет |
Вот что нам дали на занятии))называется разбирайся как хочешь,но сдать обязан...помогите плиз))объясните девушки человечьим языком)))не,я вроде девушка не глупая...но вот не все понимаю в этом блочном шифровании...
Тема 7. Блочные шифры Цель: Реализовать алгоритм блочных шифров. Теоретические сведения: Блочные шифры являются основой, на которой реализованы практически все криптосистемы. Схему работы блочного шифра можно описать функциями Z=EnCrypt(X,Key) и X=DeCrypt(Z,Key) Ключ Key является параметром блочного криптоалгоритма и представляет собой некоторый блок двоичной информации фиксированного размера. Исходный (X) и зашифрованный (Z) блоки данных также имеют фиксированную разрядность, равную между собой, но необязательно равную длине ключа. Все действия, производимые над данными блочным криптоалгоритмом, основаны на том факте, что преобразуемый блок может быть представлен в виде целого неотрицательного числа из диапазона, соответствующего его разрядности. Так, например, 32-битный блок данных можно интерпретировать как число из диапазона 0..4'294'967'295. Кроме того, блок, разрядность которого обычно является "степенью двойки", можно трактовать как несколько независимых неотрицательных чисел из меньшего диапазона (рассмотренный выше 32-битный блок можно также представить в виде 2 независимых чисел из диапазона 0..65535 или в виде 4 независимых чисел из диапазона 0..255). Над этими числами блочным криптоалгоритмом и производятся по определенной схеме следующие действия (слева даны условные обозначения этих операций на графических схемах алгоритмов) (См. Таблицу 6). Таблица 6 - Условные обозначения операций на графических схемах алгоритмов Биективные математические функции Сложение X'=X+V Исключающее ИЛИ X'=X XOR V Умножение по модулю 2N+1 X'=(X*V) mod (2N+1) Умножение по модулю 2N X'=(X*V) mod (2N) Битовые сдвиги Арифметический сдвиг влево X'=X SHL V Арифметический сдвиг вправо X'=X SHR V Циклический сдвиг влево X'=X ROL V Циклический сдвиг вправо X'=X ROR V Табличные подстановки S-box (англ. substitute) X'=Table[X,V] В качестве параметра V для любого из этих преобразований может использоваться: фиксированное число (например, X'=X+125) число, получаемое из ключа (например, X'=X+F(Key)) число, получаемое из независимой части блока (например, X2'=X2+F(X1)) Последний вариант используется в схеме, названной по имени ее создателя сетью Фейштеля (нем. Feistel). Сеть Фейштеля Сеть Фейштеля является дальнейшей модификацией описанного выше метода смешивания текущей части шифруемого блока с результатом некоторой функции, вычисленной от другой независимой части того же блока. Эта методика получила широкое распространение, поскольку обеспечивает выполнение требования о многократном использовании ключа и материала исходного блока информации. Классическая сеть Фейштеля имеет следующую структуру: Рисунок 2 - Схема Файстеля Независимые потоки информации, порожденные из исходного блока, называются ветвями сети. В классической схеме их две. Величины Vi именуются параметрами сети, обычно это функции от материала ключа. Функция F называется образующей. Действие, состоящее из однократного вычисления образующей функции и последующего наложения ее результата на другую ветвь с обменом их местами, называется циклом или раундом (англ. round) сети Фейштеля. Оптимальное число раундов K – от 8 до 32. Важно то, что увеличение количества раундов значительно увеличивает криптоскойстость любого блочного шифра к криптоанализу. Возможно, эта особенность и повлияла на столь активное распространение сети Фейштеля – ведь при обнаружении, скажем, какого-либо слабого места в алгоритме, почти всегда достаточно увеличить количество раундов на 4-8, не переписывая сам алгоритм. Часто количество раундов не фиксируется разработчиками алгоритма, а лишь указываются разумные пределы (обязательно нижний, и не всегда – верхний) этого параметра. Сеть Фейштеля обладает тем свойством, что даже если в качестве образующей функции F будет использовано необратимое преобразование, то и в этом случае вся цепочка будет восстановима. Это происходит вследствие того, что для обратного преобразования сети Фейштеля не нужно вычислять функцию F-1. Более того, как нетрудно заметить, сеть Фейштеля симметрична. Использование операции XOR, обратимой своим же повтором, и инверсия последнего обмена ветвей делают возможным раскодирование блока той же сетью Фейштеля, но с инверсным порядком параметров Vi. Заметим, что для обратимости сети Фейштеля не имеет значение является ли число раундов четным или нечетным числом. В большинстве реализаций схемы, в которых оба вышеперечисленные условия (операция XOR и уничтожение последнего обмена) сохранены, прямое и обратное преобразования производятся одной и той же процедурой, которой в качестве параметра передается вектор величин Vi либо в исходном, либо в инверсном порядке. Практическое задание: Реализовать функции шифрации и дешифрации текстового файла по схеме Фейштеля (См. рис. 2) Дополнительные задания по 1 блоку: Вы можете разработать собственные высокоэффективные алгоритмы шифрования, используя битовые манипуляции. Попробуйте реализовать некоторые из предложенных здесь идей: Создайте алгоритм на базе XOR, который использовал бы длинный ключ. На базе предыдущей идеи создайте процедуру шифрования на базе XOR, которая осуществляет пакетное кодирование файлов (единовременное кодирование пакета из нескольких байт). Выходной результат шифрования пакета используйте в качестве ключа для шифрования следующего пакета. Вот еще одна очень интересная идея: закодируйте два разных исходных файла в один и тот же зашифрованный выходной файл. Если этот файл расшифровывать одним способом, будет получен первый файл, а при декодировании вторым способом — второй файл. Попробуйте "спрятать" файл после того, как он будет зашифрован. Для этого разбейте содержимое шифрованного файла на части и распределите их по нескольким разным файлам. Очень хорошим способом является добавление кусков зашифрованного файла в конец области данных исполняемых файлов. После этого реконструировать файл будет очень сложно. Шифрование и расшифровка текста комбинацией двух разных из нижеуказанных методов. Шифрование монофонической подстановкой. Шифрование простой полиалфавитной подстановкой. Шифрование методом простой перестановки. Шифрование методом гаммирования. Программа должна для каждого символа(или блока) исходного файла произвольной структуры применить первый метод, затем второй и только затем записать в выходной файл. Для методов, требующих ключа определенного вида, например для перестановок, ключ должен формироваться на основании одного произвольного ключа, задаваемого пользователем. Зашифрованный и дешифрованный файлы по возможности должны иметь размер исходного файла. |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 35 Всего: 223 |
Возьмите книжку по криптографии (например Брюс Шнайер. Прикладная криптография) Там все подробно расписано, с примерами и текстами программ.
В вашей методичке написано, что такое сети Фейштеля, но не заданны никакие конкретные сети. Написать по ней шифрование почти то же самое, что написать роман по учебнику русского языка. |
|||
|
||||
| Regina90 |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 4.11.2010 Репутация: нет Всего: нет |
Огромное вам всем спасибо)буду пытаться...буду разбираться!!!!
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |