Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
МСЗКИ 1 и 2 лабораторные работы.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
343.55 Кб
Скачать

Обратимые операции

При шифровании часто применяются обратимые (биективные) операции. Самая популярная – операция "Исключающего ИЛИ" – XOR:

a  b = 1, если a  b;

a  b = 0, если a = b.

Например:

10 xor 250 = 240; 240 xor 250 = 10 .

Обратимой операцией является также операция сложения по модулю 2n, где n – число разрядов у операндов, участвующих в сложении.

Например:

(10 + 250) mod 256 = 4; (4 – 250) mod 256 = 10 .

Если мы имеем дело с байтовыми переменными, то будут справедливы следующие операторы: c := a + b; a:= c – b.

Гаммирование

Принцип шифрования гаммированием заключается в генерации гаммы шифра с помощью датчика псевдослучайных чисел (ПСЧ) и наложении полученной гаммы на открытые данные с помощью обратимой операции, например – XOR.

Процесс расшифрования данных сводится к повторной генерации гаммы шифра при известном ключе и наложению такой гаммы на зашифрованные данные.

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

Задания

  1. Напишите программу генерации шифра для заданных a и s по формуле:

Ci = (a Pi + s) mod N ,

где Pi – код i-го символа открытого текста (0 ≤ PiN-1);

Ci – код i-го символа зашифрованного текста (0 ≤ Ci N-1);

N – количество символов алфавита;

a – десятичный коэффициент;

s – коэффициент сдвига.

Напишите программы шифрования и расшифрования для метода моноалфавитной подстановки по заданному шифру. Язык русский. Шифр, открытый текст и зашифрованный текст должны находиться в текстовых файлах. Тестовый файл с открытым текстом должен содержать не менее 1000 символов текста художественного произведения.

  1. Напишите программы шифрования и расшифрования для метода многоалфавитной подстановки для заданного ключа. Язык английский.

Шифрование выполняется по формуле

Ci = (Pi + Kj) mod N ,

где Pi – код i-го символа открытого текста (0 ≤ PiN-1);

Ci – код i-го символа зашифрованного текста (0≤CiN-1);

N – количество символов алфавита;

Kj – код j-го символа ключа (j = i mod L; 0 j L-1);

L – длина ключа.

Ключ, открытый текст и зашифрованный текст должны находиться в отдельных текстовых файлах. Программы должны уметь работать с большими текстовыми файлами. Тестовые файлы должны содержать не менее 1000 символов текста. Попробуйте выразить функцию Pi(Ci) одной формулой.

Проведите последовательно несколько раз шифрование текстового файла с разными ключами.

Попытайтесь расшифровать полученный шифр, применяя столько же раз обратное преобразование.

  1. Напишите программу подсчета слов русского языка из текстового файла, основы которых (слова без суффикса и окончания) были найдены в словаре основ естественного языка. Словарь необходимо считывать предварительно в память и организовать так, чтобы сравнение шло как можно быстрее. Напишите программу кодирования (раскодирования), которая заменяет одни основы слов на другие.

  1. Напишите программу перекодировки символов из одной кодировки в другую для кодировок ASCII, КОИ-8, Windows и т. п. Используя эту программу, напишите программы шифрования и расшифрования для русского текста путем перекодирования. Последовательность перекодировок должна задаваться целым числом, каждая цифра которого обозначает ту или иную кодировку.

  2. В России в XIII в. для тайнописи применяли «тарабарскую грамоту». В этой системе согласные буквы заменяются по схеме

Б

В

Г

Д

Ж

З

К

Л

М

Н

Щ

Ш

Ч

Ц

Х

Ф

Т

С

Р

П

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

Напишите программы шифрования, расшифрования и дешифрования для текстовых файлов.

  1. Напишите программы шифрования и расшифрования с использованием "цифирной азбуки". В госархиве сохранились письма Петра I, в которых он передавал цифири различным деятелям для корреспонденции (П. А. Толстому, А. Д. Меньшикову и др.). Цифирь – это шифр простой замены, в котором буквам сообщения соответствовали шифрообозначения, представляющие собой буквы, слоги, слова или другие какие-нибудь знаки. При этом использовались и "пустышки" – шифрообозначения, которым не соответствовали никакие знаки открытого текста.

Буквы русского алфавита приводите к одному регистру. Все, что не шифруется, переписывайте в выходной файл без изменения.

А-ме

Б-ли

В-ко

Г-ин

Д-зе

Е-жу

Ж-ню

З-ою

И-пы

К-ра

Л-су

М-ти

Н-у

О-хи

П-от

Р-ца

С-чу

Т-ше

У-ам

Ф-ик

Х-ъ

Ц-то

Ч-ь

Ш-ю

Щ-я

Ъ-ф

Ы-ас

Ь-бе

Э-за

Ю-гу

Я-ди

« »-е

  1. Напишите программу, обеспечивающую генерацию случайным или псевдослучайным образом моноалфавитной подстановки для алфавита из n символов. Сформируйте массив [0..255], содержащий коды подстановки символов. Для остальных (255-n) символов, не вошедших в алфавит, в ячейки массива запишите код 0. Напишите программы шифрования и расшифрования, использующие полученный массив. Подстановочная таблица, открытый текст и зашифрованный текст должны находиться в текстовых файлах.

  2. Напишите программу, порождающую случайным образом перестановку последовательности чисел от 1 до n. Напишите программы шифрования и расшифрования для метода перестановки групп символов (заданной длины) в заданном порядке. Шифр, открытый текст и зашифрованный текст должны находиться в текстовых файлах. Размеры файлов открытого и зашифрованного текста не должны отличаться.

  3. Напишите программу дешифрования зашифрованного методом перестановки символов текста в группе, если известно, что открытый текст содержит текст: "Совершенно секретно". Учесть, что длина файла с зашифрованным текстом должна быть кратна длине группы. Перед перестановкой проверяйте в соседних группах наличие всех требуемых символов.

  4. Напишите программу, порождающую случайным или псевдослучайным образом перестановку последовательности чисел от 1 до n. Напишите программы шифрования и расшифрования, использующие получаемую последовательность для перестановки символов в группах. Открытый текст и зашифрованный текст должны находиться в текстовых файлах.

  5. Напишите программу, порождающую шифр «решетка Кардано», и программы шифрования и расшифрования текстовых файлов по этому методу. Решетка Кардано – это прямоугольная карточка с отверстиями (рис. 1), чаще всего квадратная.

или

Рис. 1. Шифрование с помощью решетки Кардано

Число строк и столбцов в карточке четно. Отверстия в карточке сделаны так, что при последовательном поворачивании каждая клетка лежащего под ней листа с текстом будет видна только один раз. Карточку сначала поворачивают вдоль вертикальной оси симметрии на 180°, а затем – вдоль горизонтальной оси также на 180°. И вновь на 180° вдоль вертикальной оси симметрии.

Для квадратных карточек возможны последовательные повороты на 90°.

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

Карточки можно представлять матрицами [ai,j] i=1,…,n; j=1,…,m. Для квадратных матриц размерностью nn доказано, что матрица может служить ключом для шифрования, если i и j элементы: ai,j, aj,(ni+j), a(nj+i),i , a(n-i+j),(n-j+i) содержат точно одну прорезь.

Реализуйте программу для квадратных и прямоугольных карточек, для поворотов на 90 и 180°.

  1. Напишите программы шифрования и расшифрования методом маршрутной транспозиции. Метод состоит в том, что каждый блок символов открытого текста вписывается в заданный прямоугольник [m x n] змейкой. Столбцы нумеруются в порядке следования букв алфавита в ключевой фразе. Последний блок дополняется до полного символами алфавита – А Б В … Считывается результат по столбцам.

Например. Пусть m=9, n=7, а порядок столбцов задается ключевым словом "СВЯТОСЛАВ".

С

В

Я

Т

О

С

Л

А

В

6

2

9

8

5

7

4

1

3

6

2

9

8

5

7

4

1

3

С

Е

Д

Л

А

Й

Б

Р

А

Р

О

Б

И

О

В

С

Е

Т

З

Ы

И

К

О

М

О

Н

И

Т

О

Г

И

Т

И

О

М

А

О

В

И

О

С

Е

Д

Л

А

К

С

Ь

Р

У

К

У

И

Н

А

Н

А

П

Е

Р

Е

Д

И

В результате получится зашифрованный текст: РЕНМЛИД ЕОЫОВСН АТИААНИ БСООДУЕ АООТСУЕ СРЗТОКА ЙВМИЕКР ЛИКИОРП ДБИГИЬА.

Имена текстовых файлов с исходным и зашифрованным сообщением, константы m и n должны задаваться в качестве параметров.

  1. Напишите программы шифрования и расшифрования методом перестановки символов открытого текста, нанесенных на грани "кубика Рубика". Последовательность поворотов одна и та же для всех групп символов.

  2. Напишите программу генерации псевдослучайных чисел (ПСЧ), применяя линейный конгруэнтный генератор ПСЧ, вырабатывающий последовательность T1, T2, …, Tm, …, используя соотношение

Ti+1 = (a Ti + c) mod m ,

где a и c – константы (с – нечетное, а mod 4 = 1);

T0 – исходная величина, выбранная в качестве порождающего числа;

m – константа; обычно устанавливается равной 2b или 2b-1;

b – длина слова ЭВМ в битах (взять b=8).

Сгенерируйте m чисел. Определите числа от 0 до m-1, которые ни разу не были сгенерированы. Определите числа, сгенерированные более одного раза.

Постройте график частоты попадания 100 000 сгенерированных чисел в интервалы по 1000 чисел. Такой же график постройте для функции Random() языка Pascal. Исследуйте, как влияют на характер распределения генерируемой последовательности чисел константы a и c. Определите период повторяемости генерируемых чисел.

  1. Напишите программы шифрования и расшифрования, использующие генератор ПСЧ (см. задание №14). Программы должны применять операцию "исключающее ИЛИ" для объединения очередного сгенерированного числа и символа из текста. Открытый и зашифрованный тексты должны находиться в текстовых файлах.

  2. Напишите программы шифрования и расшифрования методом многоалфавитной подстановки (см. задание №2). Kj получайте с помощью генератора ПСЧ. Начальное (инициализационное) число псевдослучайной последовательности чисел будет являться ключом шифра.

  3. Напишите программы шифрования и расшифрования с использованием файла со стихотворением. Каждую букву открытого текста шифруют парой чисел – номером строки, где встречается эта буква, и номером буквы в ней. Поиск следующего символа начнется от только что найденного. Открытый, ключевой и зашифрованный тексты должны находиться в текстовых файлах.

  4. Были перехвачены два зашифрованных сообщения:

05262C5269143F314C2A69651A264B5E7EE9

610728413B63072C52222169720B425E7DA745

Здесь они приведены в шестнадцатеричном виде. Известно, что применялось шифрование методом гаммирования. Код каждого символа сообщения с помощью операции XOR накладывался на код, полученный от генератора псевдослучайных чисел. В обоих случаях было передано одно и то же сообщение и использована одна и та же гамма. Но во втором случае в начало исходного сообщения был добавлен один пробел. Требуется дешифровать это сообщение.

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

20. В дисковом массиве уровня RAID5, состоящем из 4-х дисков, вышел из строя Disk 2. Вы должны написать программу восстановления содержимого испорченного диска и прочитать текст, который был записан в дисковом массиве. Ниже приводится содержимое дисков в шестнадцатеричном виде.

Disk 0

Disk 1

Disk 2

Disk 3

72

65

73

75

6E

64

61

7B

74

33

20

72

72

61

6A

20

6F

66

20

27

6E

71

64

70

65

6E

6F

65

6E

74

20

2D

69

6B

73

73

Размер блоков данных для данного массива равен одному байту. Для ускорения записи и чтения в дисковом массиве RAID5 блоки данных (Х1, Х2, Х3) и контрольные суммы (Хр) записываются параллельно на все диски с циклическим сдвигом (см. рис.). Контрольные суммы вычисляются с помощью операции  (xor) следующим образом: Хp=Х1  Х2  Х3.