Санкт-Петербургский
государственный электротехнический университет
“ЛЭТИ”
______________________________________________________________________
кафедра МОЭВМ
МЕТОДЫ И СРЕДСТВА ЗАЩИТЫ КОМПЬЮТЕРНОЙ ИНФОРМАЦИИ
Лабораторная работа N1 СИММЕТРИЧНАЯ КРИПТОГРАФИЯ. ПРОСТЫЕ ШИФРЫ.
Вариант 2
Выполнили: ст. гр. 3341 Постникова О. Е.
Злобин А.Н.
Проверил: Горячев Г.А.
Санкт-Петербург
2008
Лабораторная работа № 1
Простые шифры
Цель работы:Ознакомление с простыми симметричными криптографическими шифрами на основе методов подстановок, перестановок и гаммирования.
1. Содержательная постановка задачи:
Разработка и программная реализация следующих вариантов алгоритмов шифрования/дешифрования:
Квадрат Полибия (5 х 5, 5 х 6, 4 х 7, 6 х 6, 5 х 7 и т. д. ). Квадрат Кардано (NxN).
2. Описание алгоритма:
Квадрат Полибия– простой подстановочный шифр. Буквы некоторого алфавита записываются в таблицу (квадратную или почти квадратную). При шифровании каждая буква сообщения заменяется на пару (номер строки, номер столбца, в которых она расположена в таблице). Дешифрование – по номеру строки и столбца определяется буква.
Для английского языка квадрат представлен на рисунке 1.1:
|
1 |
2 |
3 |
4 |
5 |
1 |
a |
b |
c |
d |
e |
2 |
f |
g |
h |
ij |
k |
3 |
l |
m |
n |
o |
p |
4 |
q |
r |
s |
t |
u |
5 |
v |
w |
x |
y |
z |
Рис1.1
Пришлось пожертвовать одним символом
Для русского языка придется отказаться от 3-х символов, чтобы вписать алфавит в таблицу 6х5
Квадрат Кардано– квадрат с пустыми клетками, в которые вписываются буквы. Когда все клетки заполнены квадрат поворачивается на 90 градусов и продолжается запись. После 3-х поворотов весь квадрат заполнен символами сообщения. При декодировании надо наложить квадрат четырьмя разными способами и получить текст. Квадрат является закрытым ключом.
Пример квадрата размера 4 представлен на рисунке 1.2:
|
|
|
|
а |
|
|
б |
|
|
в |
|
г |
|
|
|
Рис.1.2.
После одного поворота представлен на рисунке 1.3
|
д |
|
|
а |
|
е |
б |
|
|
в |
|
г |
ж |
|
з |
Рис.1.3.
3. Реализация алгоритма:
Алгоритмы реализованы на языке С++: