Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Задания на лабораторные работы / Лабораторная работа №3.doc
Скачиваний:
66
Добавлен:
28.06.2014
Размер:
72.7 Кб
Скачать

Рекомендуемые для разработки программы средства языка Object Pascal

  1. Стандартные функции для преобразования символа в его код и наоборот:

function Ord(X:Char): Longint; // код символа X

function Chr(X: Byte): Char; // символ с кодом X

  1. Операция поразрядного сложения по модулю 2:

xor

  1. Операция вычисления остатка от целочисленного деления:

mod

  1. Функция получения позиции символа в строке:

function Pos(c:Char; s:String): Integer; { s – имя строки, c – проверяемый символ, результат равен номеру позиции первого вхождения c в s или 0 }

Описание алгоритмов шифрования

  1. Перестановка. Шифрование:

 i, 0≤i≤n-1 Ci=Pk[i], где

  • P={P0, P1, … , Pi, … , Pn-1} – открытый текст;

  • n – длина открытого текста;

  • C={C0, C1, … , Ci, … , Cn-1} – шифротекст;

  • k={k0, k1, …, ki, … , kn-1} – ключ шифрования.

При расшифровании применяется обратная перестановка:

 i, 0≤i≤n-1 Pk[i]= Ci.

При шифровании перестановкой ключ должен удовлетворять условию:

kik 0≤ki≤n-1   ki, kjk ki≠kj.

Если длина ключа меньше длины открытого текста, то следует разбить открытый текст на блоки, длина которых равна длине ключа, и последовательно применить ключ перестановки к каждому блоку открытого текста. Если длина открытого текста не кратна длине ключа, то последний блок должен быть дополнен пробелами.

Если длина ключа больше длины открытого текста, то ключ усекается до нужной длины.

Процедура генерации ключа перестановки k из текстовой строки (пароля) t:

  1. сортировка t по алфавиту и получение новой строки t´ (например, t=матрос, t´=аморст);

  2. получение элементов ключа ki=позиция символа ti в строке t´ (например, k=105324);

  3. если строка t содержит одинаковые символы (например, t=анна), то при получении элемента ключа ki используется позиция следующего вхождения символа ti в строке t´ (например, t´=аанн, k=0231) (в программе для этого можно после нахождения позиции очередного символа заменить его, например, символом с кодом 1).

  1. Одноалфавитная подстановка (замена). Шифрование:

 i, 0≤i≤n-1 Ci=Pi+k {mod m}, где

  • P={P0, P1, … , Pi, … , Pn-1} – открытый текст;

  • n – длина открытого текста;

  • A={A0, A1, … , Am-1} – алфавит символов открытого текста ( i, 0≤i≤n-1 PiA);

  • C={C0, C1, … , Ci, … , Cn-1} – шифротекст;

  • k – ключ шифрования (0≤k<m);

  • aiA, 0≤i≤m-1 ai+k=ai+k.

Расшифрование:

 i, 0≤i≤n-1 Ci=Pi+m-k {mod m}

  1. Многоалфавитная подстановка (замена). Шифрование:

 i, 0≤i≤n-1 Ci=Pi+ki {mod m}, где

  • P={P0, P1, … , Pi, … , Pn-1} – открытый текст;

  • n – длина открытого текста;

  • A={A0, A1, … , Am-1} – алфавит символов открытого текста ( i, 0≤i≤n-1 PiA);

  • C={C0, C1, … , Ci, … , Cn-1} – шифротекст;

  • k={k0, k1, … , ki, … , kn-1} – ключ шифрования ( i, 0≤i≤n-1 0≤ki<m);

  • aiA, 0≤i≤m-1 ai+k=ai+k.

Расшифрование:

 i, 0≤i≤n-1 Ci=Pi+m-ki {mod m}

Если длина ключа меньше длины открытого текста, то необходимо разбить открытый текст на блоки, длина которых равна длине ключа, и последовательно применить ключ подстановки к каждому блоку открытого текста. Если длина открытого текста не кратна длине ключа, то последний блок следует дополнить необходимым количеством пробелов.

Если длина ключа больше длины открытого текста, то ключ усекается до нужной длины.

  1. Гаммирование. Шифрование:

 i, 0≤i≤n-1 Ci=Pi  Gi, где

  • P={P0, P1, … , Pi, … , Pn-1} – открытый текст;

  • n – длина открытого текста;

  • C={C0, C1, … , Ci, … , Cn-1} – шифротекст;

  • G={G0, G1, … , Gi, … , Gn-1} – гамма шифра;

  •  - операция поразрядного сложения по модулю 2.

Расшифрование:

 i, 0≤i≤n-1 Pi=Ci  Gi

  1. Побайтное шифрование без ключа:

  1.  i, 0≤i<n-1 Ci+1=Pi  Pi+1;

  2. С0=P0  Cn-1, где

  • P={P0, P1, … , Pi, … , Pn-1} – открытый текст;

  • C={C0, C1, … , Ci, … , Cn-1} – шифротекст;

  •  - операция поразрядного сложения по модулю 2.

Расшифрование:

  1. P0=C0  Cn-1;

  2.  i, 0≤i<n-1 Pi+1=Ci+1  Pi.