35027

Алгоритм шифрования XOR

Лабораторная работа

Информатика, кибернетика и программирование

XOR – это функция булевой алгебры, носящей название «исключающее или», данная функция используется для работы с данными представленными в двоичной системе исчисления. Основным достоинством, позволяющим использовать эту функцию в шифровальных алгоритмах является ее обратимость, при отсутствии потери информации.

Русский

2014-03-24

131.96 KB

78 чел.

Лабораторная работа №5

Алгоритм шифрования XOR.

Цель работы.

Целью данной работы является изучение Алгоритма шифрования XOR при использовании открытого ключа и гаммы псевдослучайных чисел.

Теоретическая часть.

XOR – это функция  булевой алгебры, носящей название «исключающее или», данная функция используется для работы с данными представленными в двоичной системе исчисления. Основным достоинством, позволяющим использовать эту функцию в шифровальных алгоритмах является ее обратимость, при отсутствии потери информации.

Как ни странно, но самым простым и одним из самых эффективных (при правильном использовании) алгоритмов шифрования является так называемое XOR-шифрование.
Как известно из булевой алгебры, операция логического сложения «» по модулю 2 (или логического исключаещего ИЛИ — XOR, eXclusive OR) имеет следующую семантику:

То есть, операция z = x y по сути поразрядная (побитовая — результат не зависит от соседних битов). Если только один из соответствующих битов равен 1, то результат 1. А если оба 0 или оба 1, то результат 0. Если внимательно посмотреть на результат применения XOR к двум двоичным числам, то можно заметить, что мы можем восстановить одно из слагаемых при помощи второго: x =  или  y = .

1) Логическое умножение или конъюнкция:

Конъюнкция - это сложное логическое выражение, которое считается истинным в том и только том случае, когда оба простых выражения являются истинными, во всех остальных случаях данное сложеное выражение ложно.
Обозначение: F = A & B.

Таблица истинности для конъюнкции

A

B

F

1

1

1

1

0

0

0

1

0

0

0

0

2) Логическое сложение или дизъюнкция:

Дизъюнкция - это сложное логическое выражение, которое истинно, если хотя бы одно из простых логических выражений истинно и ложно тогда и только тогда, когда оба простых логических выраженныя ложны.
Обозначение: F = A + B.  Таблица истинности для дизъюнкции

A

B

F

1

1

1

1

0

1

0

1

1

0

0

0

3) Логическое отрицание или инверсия:

Инверсия - это сложное логическое выражение, если исходное логическое выражение истинно, то результат отрицания будет ложным, и наоборот, если исходное логическое выражение ложно, то результат отрицания будет истинным. Другими простыми слова, данная операция означает, что к исходному логическому выражению добавляется частица НЕ или слова НЕВЕРНО, ЧТО.

Таблица истинности для инверсии

A

неА

1

0

0

1

4) Логическое следование или импликация:

Импликация - это сложное логическое выражение, которое истинно во всех случаях, кроме как из истины следует ложь. То есть данная логическая операция связывает два простых логических выражения, из которых первое является условием (А), а второе (В) является следствием.

Таблица истинности для импликации

A

B

F

1

1

1

1

0

0

0

1

1

0

0

1

5) Логическая равнозначность или эквивалентность:

Эквивалентность - это сложное логическое выражение, которое является истинным тогда и только тогда, когда оба простых логических выражения имеют одинаковую истинность.

Таблица истинности для эквивалентности

A

B

F

1

1

1

1

0

0

0

1

0

0

0

1

Функции в Delphi:

  1. Функция Chr конвертирует целое число IntValue или в AnsiChar или в WideChar
  2. Функция Ord возвращает порядковое значение символа или элемента перечисления в виде неотрицательного целого.
  3. Функция Length возвращает или число символов в String, или число элементов в Array.
  4. Ключевое слово Div дает целое число полученное в результате деления делимого делителеля.

Операторы цикла в Delphi:

  1.  оператор цикла For – Do

Синтаксис оператора имеет две разновидности:

For счетчик цикла:=нач.знач. To конеч.знач. Do оператор

For счетчик цикла:=нач.знач. Downto конеч.знач. Do оператор

Здесь конструкция For .. Do называется заголовком цикла, оператор – телом цикла.

Для циклов должны соблюдаться следующие правила и ограничения:

  1. начальное и конечное значения счетчика цикла должны быть одинаковых простых типов, кроме Real;
  2. в теле цикла счетчик не должен менять значение;
  3. вход в цикл минуя заголовок запрещен;
  4. для первой разновидности начальное значение не должно быть больше конечного;
  5. для второй разновидности начальное значение не должно быть меньше конечного.

Первая разновидность оператора цикла For работает следующим образом. Сначала счетчик цикла принимает нач.знач. и выполняется оператор, расположенный вслед за словом Do. Затем значение счетчика будет увеличено на шаг счетчика 1 и вновь будет выполнен оператор и т. д., пока счетчик не переберет все значения от нач.знач. до конеч.знач.

Пример.

s:= 0;
For i:=1 to 44 do s:= s + z[i];

В результате в переменной s будет накоплена сумма первых 44 элементов массива z.

Другая разновидность оператора For отличается лишь отрицательным шагом –1 счетчика.

  1.  Оператор цикла While – Do

Синтаксис оператора:

While логическое выражение Do оператор;

Цикл выполняет оператор, расположенный вслед за словом Do до тех пор, пока истинно логическое выражение, расположенное за словом While ("выполняй, пока истинно").

Пример.

x:= 0;
i:=0;
While (x < 101.667) do
Begin
Inc (i);
X:= X + 5.617;
Y[i]:= Func (i + 6, 9 * i, X);
End;

В этом примере цикл будет выполняться до тех пор, пока не выполнится условие x < 101.667. В теле цикла переменная X с каждым шагом цикла увеличивает свое значение на 5.617 так, что на определенном шаге условие x < 101.667 впервые не будет выполнено. В этот момент без входа в тело цикл закончит работу.

  1.  Оператор цикла Repeat – Until

Синтаксис оператора:

Repeat
Оператор1;
Оператор2;

ОператорN;
Until логическое выражение;

Цикл работает, пока логическое выражение ложно ("повторяй, пока не выполнится").

Пример.

s:= 0;
i:=0;
Repeat
Inc (i); 
s:= s + z[i];
Until (i = 44);

В этом примере цикл будет выполняться до тех пор, пока не выполнится условие i = 44. Результат будет тот же, что в примере для For-цикла.

Функции в MathCad:

  1.  round - округление z по числу n. Если n опущен, z округляется к самому близкому целому числу.
  2.  rnd - выдаёт однородно распределенное случайное число между 0 и x.
  3.  matrix(m, n, f) -  выдаёт m x n матрицу, в которой ijth элемент дается как f(i, j).

Эта функция как правило доступна в любом математической или программной среде, позволяющей использовать данные в двоичной системе исчисления. В системе MathCad функция xor реализуется встроенной функцией xor(a,b), а в среде Delphi 

операцией -   a xor b.

Для работы с массивами в системе MathCad необходимо использовать палитру векторов и матриц.

Рис. 1 Панель векторов и матриц

Диапазон чисел для задания циклов и диапазонов можно получить при помощи функции m..n в палитре вычислений.

Рис2. Палитра вычислений.

Матрицы задаются через палитру векторов и матриц  функцией вектор и матрица, а для ее создания необходимо указать количество строк(rows) и столбцов(columns). Для извлечения чисел из массива необходимо воспользоваться функцией индекс(subscript) в палитре матриц и векторов.

Для реализации алгоритма XOR в среде Delphi  необходимо использовать или массивы или строки. Массивы задаются в разделе объявления переменных(var)

в виде A: array[1...10] of char; но в данной работе можно воспользоваться свойствами строковых типов данных и вместо массивов использовать данные стокового типа(s: string;). Для реализации данного алгоритма могут потребоваться функции преобразования типов данных chr(a:integer) и ord(с:char). При работе со строковыми типами данных может пригодится функция Length(s:string);.

Поскольку длина ключа, как правило меньше длины сообщения, то для шифрования всего сообщения длину ключа доводят до длины сообщения при помощи создания ключа  длиной равной длине текста путем составления строки или массива равной длине исходного текста и состоящей из повторяющейся строки ключа. Для реализации алгоритма такого растяжения ключа могут потребоваться функции div,For, If и while.

Задание для лабораторной  работы.

1) Реализовать алгоритм XOR шифрования в математической системе MathCad, исходным сообщением является одномерный массив с общим числом элементов 20, элементами массива являются  числа 0 и 1, ключ представляет собой одномерный массив из 5 элементов 0 и 1. Шифротекста представить виде  одномерного массива из 20 элементов результата каждый элемент которого является результатом операции XOR между элементом сообщения и элементом шифротекста.

2) Реализовать алгоритм XOR шифрования в среде Delphi, при условии, что исходным сообщением является строка текста длиной 15-20 символов, а ключом строка текста из 7-10 символов, вводимых через компонент Edit, вывод шифротекста должен осуществляться в компонент Memo.

Порядок выполнения работ.

1-ое задание

  1. При помощи round и rnd  создаем функцию, генерирующая нули и единицы.
  2. Задаем исходное сообщение, при помощи функции matrix задаем одномерный массив с общим числом элементов 20.
  3. Задаем ключ, при помощи функции matrix задаем одномерный массив с общим числом элементов 5.
  4. Выводим значения исходного сообщения.
  5. Выводим значения ключа.
  6. Применяем XOR к обеим матрицам

  1. Задаем зашифрованное сообщение, при помощи функции matrix задаем одномерный массив с общим числом элементов 20.

  1. Выводим зашифрованное сообщение.

2-ое задание

  1. Создаем форму на которой устанавливаем такие объекты как «Edit1», «Edit2», «Memo1», «Button1», «Button2».

  1. В общей  секции объявления переменных «var» задаем:

r:integer=1;

  1. Во вкладке Unit1 создаем function XOREncrypt(Text,Key: string): string; которая реализует алгоритм шифрования XOR.
  2. Используя секцию объявления переменных «var» зададим: счетчик, ключ и шифрованную букву.

var

i:integer;  // Счетчик

LKey:string;  //  Длинный ключ

Word:char;  //  Шифрованная буква

  1. Задаем цикл который будет добивать наш ключ до размеров сообщения для шифрования и цикл который будет каждую букву из сообщения суммировать при помощи «исключающего или»  с буквой из длинного ключа:

Begin

for i:=0 to (Length(Text) div length(Key)) do

LKey:=LKey+Key;

for i:=1 to length(Text) do

begin

Word:=chr ((ord(Text[i]) XOR ord(LKey[i])));

Result:=Result+Word;

end;

end;

  1. Два раза щелкаем левой кнопки мыши на кнопке «GO»
  2. При помощи секции объявления переменных «var» зададим:

var

Text,Encrypt_Text,Decrypt_Text:string;

  1. Прописываем алгоритм считывания сообщения и ключа и вывода зашифрованного сообщения в поле memo1.

begin

Text:=edit1.Text;

Encrypt_Text:=XOREncrypt(Text,edit2.Text);

memo1.Lines.Add('-----' +inttostr(r)+ ' Шифрование -------------------------');

memo1.Lines.Add('Зашифрованное слово: ' + Encrypt_Text);

Decrypt_Text:=XOREncrypt(Encrypt_Text,edit2.Text);

memo1.Lines.Add('Шифруемое слово: ' + edit1.Text);

memo1.Lines.Add('-----------------------------------------------------------');

memo1.Lines.Add(' ');

inc(r);

end;

  1. Два раза щелкаем левой кнопки мыши на кнопке «Выход» и прописываем ей функцию close.
  2. При нажатии на кнопку введенный текст в поле Edit1 присваивается значению Text. Далее присваиваем например Encrypt_Text:= XOREncrypt(Text, edit2.Text); то есть ссылаемся на функцию XOREncrypt которая реализует алгоритм шифрования XOR. Потом выводим значения зашифрованного текста и шифруемого слова в поле Memo1.

Контрольные вопросы.

  1. Булевы операции, их типы, условные обозначения и таблицы истинности.
  2. Алгоритм шифрования XOR.
  3. Назначение функций chr, ord, length, div.
  4. Операторы циклов в среде Delphi(или Pascal).

Содержание отчета.

1.Отчет должен быть выполнен на бумаге формата А4.

2.Отчет должен содержать  краткую теорию по теме работы.

3.Отчет должен содержать текст программ MathCad с комментариями.

3.Отчет должен содержать листинг программ выполненных в  Delphi с комментариями.

4.Отчет должен содержать выводы о проделанной лабораторной работе.


 

А также другие работы, которые могут Вас заинтересовать

15752. СЕМИОТИЧЕСКИЕ МЕХАНИЗМЫ ИНТЕРТЕКСТУАЛЬНОСТИ 49.5 KB
  А.В. БОРИСЕНКО Тверь СЕМИОТИЧЕСКИЕ МЕХАНИЗМЫ ИНТЕРТЕКСТУАЛЬНОСТИ Интерес к работам Ч. Пирса обострившийся в последнее время в значительной мере связан с тем что его концепция знака оказалась в большей степени адекватна современным представлениям о природе комм...
15753. АРХИТЕКТОНИКА И СТРУКТУРА ТЕКСТА: ПОСТАНОВКА ПРОБЛЕМЫ (НА МАТЕРИАЛЕ РАССКАЗА И.А. БУНИНА «ПРЕОБРАЖЕНИЕ») 50.5 KB
  Л.Ю. ЧУНЁВА Тверь АРХИТЕКТОНИКА И СТРУКТУРА ТЕКСТА: ПОСТАНОВКА ПРОБЛЕМЫ НА МАТЕРИАЛЕ РАССКАЗА И.А. БУНИНА ПРЕОБРАЖЕНИЕ Понятие архитектоника часто встречается в литературоведческих исследованиях1 но его значение пока остается неопределенным. Даже в тех р
15754. ПОЭТИКА ОГЛАВЛЕНИЯ (СЕРГЕЙ ЕСЕНИН. «РАДУНИЦА») 99 KB
  Е.В. ВОЙТКЕВИЧ Тверь ПОЭТИКА ОГЛАВЛЕНИЯ СЕРГЕЙ ЕСЕНИН. РАДУНИЦА Оглавление возможности которого как смыслообразующего элемента текста практически не изучены принято рассматривать как вспомогательный элемент текста. Между тем оглавление способно играть в
15755. РУССКИЙ РОК: К ПРОБЛЕМЕ НАУЧНОЙ ДЕФИНИЦИИ 75.5 KB
  О.Э. НИКИТИНА Тверь РУССКИЙ РОК: К ПРОБЛЕМЕ НАУЧНОЙ ДЕФИНИЦИИ Изучение русского рока как национального варианта общекультурного феномена является сравнительно новой сферой научного интереса. Большинство исследований в этой области посвящено решению проблем час
15756. КАМЧАТКА КАК СОСТОЯНИЕ ДУШИ: К ВОПРОСУ О МЕТОДАХ ИССЛЕДОВАНИЯ РУССКОЙ РОК-ПОЭЗИИ 62 KB
  С.А. ПЕТРОВА СанктПетербург КАМЧАТКА КАК СОСТОЯНИЕ ДУШИ: К ВОПРОСУ О МЕТОДАХ ИССЛЕДОВАНИЯ РУССКОЙ РОКПОЭЗИИ Как известно романтизм третьей волны1 не смог бы образоваться без своих предшественников. И при исследовании литературных творений этой традиции конц
15757. ЕКОНОМІЧНА ЕФЕКТИВНІСТЬ РОСЛИННИЦЬКИХ ГАЛУЗЕЙ ТА ШЛЯХИ ЇЇ ПІДВИЩЕННЯ ТОВ «НАТАЛКА» ЯМПІЛЬСЬКОГО РАЙОНУ 676.5 KB
  Питаннями підвищення економічної ефективності виробництва сільськогосподарської продукції займається велика група науковців. Ними розроблені стратегічні аспекти зміцнення сільськогосподарського виробництва в країні, структурної перебудови галузі, підвищення економічної ефективності використання земельних, матеріально-технічних і трудових ресурсів, ціноутворення, формування і функціонування ринків зерна.
15758. История Советской архитектуры 113.5 KB
  Социалистическая революция уничтожила частную собственность на землю и средства производства. Впервые в истории архитектуры не на словах, а на деле стала архитектурой для всего народа, архитектор – государственным деятелем, что в корне изменило социально-идеологическую направленность, а следовательно, и все ценностные критерии архитектуры.
15759. Особенности работы школы по формированию гражданской идентичности младших школьников 199.5 KB
  На основе анализа психолого-педагогической литературы определить теоретическое значение понятия “гражданская идентичность”. Проанализировать психологические особенности младших школьников в контексте развития гражданских качеств личности. Рассмотреть формирование гражданских и патриотических качеств младших школьников как основы гражданской идентичности на уроках.
15760. Объект, предмет, метод и организация статистики промышленности 43 KB
  Тема 1. Объект предмет метод и организация статистики промышленности. Промышленность является основой экономики. Она создает материальнотехническую базу научнотехнического прогресса и средства производства для других отраслей производит большую часть продуктов...