Учебная работа. Курсовая работа: Программная реализация криптографического алгоритма шифрования с использованием открытого текста
Пензенский муниципальный институт
Кафедра «Информационной сохранности систем и технологий»
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к курсовому проекту на тему
“ Программная реализация криптографического метода шифрования с внедрением открытого текста в качестве ключа ”
ПГУ 3.090105.001 ПЗ
Дисциплина: КМЗИ
Группа:
Разработал студент:
Работа принята с оценкой:
Управляющий проекта:
Пенза 2006г.
Реферат
Объяснительная записка содержит 24 страничек, 4 источника, 4 приложения.
ТАБЛИЦА ВИЖЕНЕРА, АЛФАВИТ, ОТКРЫТЫЙ текст, ШИФРОТЕКСТ, ШИФРОВАНИЕ, РАСШИФРОВАНИЕ.
Объектом исследования является шифр по таблице Виженера.
Целью работы является реализация криптографического метода шифрования с внедрением открытого текста в качестве ключа по таблице Виженера.
В процессе работы был рассмотрен шифр подмены и разработана программка, реализующая данный шифр.
В итоге работы был реализован криптографический метод ручного шифра по таблице Виженера, осуществляющий шифрование.
Содержание
Реферат
Задание
Введение
1 Разработка метода программки ручного шифра по таблице Виженера
1.1 Функция шифрования
1.2 Функция расшифрования
2 Разработка программки, выполняющей шифрование и расшифрование по таблице Виженера
3 Экспериментальная проверка работы программки
Заключение
Перечень использованных источников
приложение А. Непременное. Метод программки шифрования и расшифрования
приложение Б. Непременное. Метод функции шифрования
Приложение В. Непременное. метод функции расшифрования
приложение Г. Непременное. Листинг программки шифрования и расшифрования
Введение
В истинное время обширное распространение получили индивидуальные компы. Они, без преувеличения, вошли во все сферы людской деятель. Это очень облегчило человечий труд. на данный момент тяжело представить, чтоб делал человек без компа. Компании, компании, кабинеты, банки — это ещё далековато не все области внедрения индивидуального компа.
Без использования криптографии сейчас невообразимо решение задач по обеспечению сохранности инфы, связанных с конфиденциальностью и целостностью. Если до 1990г. тайнопись обеспечивала закрытие муниципальных линий связи, то в наши деньки внедрение криптографических способов получило обширное распространение благодаря развитию компьютерных сетей и электрического обмена данными в разных областях[2].
Владение языками программирования дозволяет существенно расширить круг выполняемых задач спецом по защите инфы и наиболее много применять способности компа.
Данная курсовая работа написана на языке С.
Разработанная программка владеет интерактивным интерфейсом. Способы и средства взаимодействия с аппаратными и программными средствами именуют пользовательским интерфейсом [4].
С – это всепригодный язык программирования с малогабаритным методом записи выражений, современными механизмами управления структурами данных и богатым набором операторов[1].
Целью курсовой работы является реализация криптографического метода шифрования с внедрением открытого текста в качестве ключа по таблице Виженера.
Почти все недочеты и неудобства схем шифрованной связи с обычным применением ключей удаётся преодолеть, используя идею так именуемого «открытого» ключа. Принципная база данной для нас идеи состоит в использовании характеристики неких математических операций, имеющих разную сложность выполнения в «прямом» и «оборотном» направлениях. На базе этого характеристики можно создать такую систему шифрования, для которой процесс зашифрования производится при помощи «открытого» («общедоступного») ключа, а процесс расшифрования производится при помощи секретного ключа, который имеется лишь у адресата. Определение секретного ключа на базе познания «открытого» ключа — другими словами решить для ключа «оборотную» задачку представляет очень сложную делему, что и описывает стойкость шифросистемы.
Очевидно, «сложность» выполнения математической операции зависит от используемого метода и, в конечном счёте, сводится к оценке числа так именуемых «простых» операций, составляющих метод вычисления. Если подразумевать, что метод математической операции реализуется на ЭВМ (Электронная вычислительная машина — комплекс технических средств, предназначенных для автоматической обработки информации в процессе решения вычислительных и информационных задач), то при данных параметрах ЭВМ (Электронная вычислительная машина — комплекс технических средств, предназначенных для автоматической обработки информации в процессе решения вычислительных и информационных задач) (скорость вычисления, объём длительной и оперативки) «сложность» математической операции быть может оценена временем её выполнения на ЭВМ (Электронная вычислительная машина — комплекс технических средств, предназначенных для автоматической обработки информации в процессе решения вычислительных и информационных задач). Существует элементарные методы, основанные на поочередном переборе всех вероятных вариантов решения и выделении посреди их настоящего варианта. Но таковой «силовой» способ просит огромных временных издержек и на практике невыполним, если характеристики задачки ( в примерах – это величена чисел, разлагаемого на обыкновенные множители; свойство многочлена и величина степени, в которую он возводится) довольно значительны.
Поиск и разработка действенных алгоритмов для выполнения неких математических операций либо подтверждение невозможности их построения представляют сложную математическую делему, над решением которой упрямо работают арифметики всего мира. В крайние годы получены некие успехи в данной для нас области, что, естественно, принудило переоценить стойкость неких шифросистем, построенных на базе внедрения «открытого» ключа. Но есть трудности, где продвижения в поисках действенных алгоритмов оказались недостающими для их практической реализации либо требуют очень огромных вещественных и временных издержек. ТО, что над этими неуввязками работают самые квалифицированные арифметики всего мира, пытаясь сделать лучше методы решения «оборотных» задач, даёт основание считать, что на определённый период времени такового рода «сложные» математические операции могут обеспечивать криптографическую стойкость шифросистем, построенных с их внедрением. Конкретно к таковым дилеммам относится « дискретное логарифмирование»[3].
1. Разработка метода программки ручного шифра по таблице Виженера
метод программки шифрования и расшифрования приведен в приложении А.
программка обязана реализовывать метод шифрования и расшифрования по квадрату Виженера.
1.1 Функция шифрования
метод функции шифрования приведен в приложении Б.
Виженер высказывает идею использования в качестве ключа самого открытого текста. При шифровании применяется таблица Тритемия, слегка измененную Виженером (см. таблицу 1). Заблаговременно оговаривается одна главная буковка алфавита, обозначим ее через t
0
. Она употребляется как ключ при шифровании первой буковкы текста t
1
. Последовательность букв открытого текста t
1
t
2
… подписывается под главный последовательностью t
0
t
1
t
2
…:
Пара букв, стоящих друг под другом в главный последовательности и в открытом тексте, показывает, соответственно, номера строк ti
–1
и столбцов ti
таблицы Тритемия, на пересечении которых находится буковка si
шифрованного текста.
1.2 Функция расшифрования
Метод функции расшифрования приведён в приложении В.
При расшифровании открытый текст, являющийся частью главный последовательности, нам вначале неизвестен. Но если расшифровывающий понимает буковку ключа t
0
, он может расшифровать первую буковку шифрованного текста s
1
: для этого находим в строке таблицы Виженера (см. таблицу 1) с номером t
0
буковку s
1
, t
1
есть номер столбца, в каком она находится (буковка такого же столбца в первой строке). Вписываем эту буковку над s
2
и расшифровываем вторую буковку. И т.д.
Таблица 1. Таблица Виженера
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
a
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
b
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
a
c
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
a
b
d
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
a
b
c
e
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
a
b
c
d
f
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
a
b
c
d
e
g
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
a
b
c
d
e
f
h
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
a
b
c
d
e
f
g
i
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
a
b
c
d
e
f
g
h
j
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
a
b
c
d
e
f
g
h
i
k
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
a
b
c
d
e
f
g
h
i
j
l
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
a
b
c
d
e
f
g
h
i
j
k
m
m
n
o
p
q
r
s
t
u
v
w
x
y
z
a
b
c
d
e
f
g
h
i
j
k
l
n
n
o
p
q
r
s
t
u
v
w
x
y
z
a
b
c
d
e
f
g
h
i
j
k
l
m
o
o
p
q
r
s
t
u
v
w
x
y
z
a
b
c
d
e
f
g
h
i
j
k
l
m
n
p
p
q
r
s
t
u
v
w
x
y
z
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
q
q
r
s
t
u
v
w
x
y
z
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
r
r
s
t
u
v
w
x
y
z
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
s
s
t
u
v
w
x
y
z
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
t
t
u
v
w
x
y
z
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
u
u
v
w
x
y
z
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
v
v
w
x
y
z
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
w
w
x
y
z
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
x
x
y
z
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
y
y
z
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
z
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
2. Разработка программки, выполняющей шифрование и расшифрование по таблице Виженера
текст программки шифрования и расшифрования приведен в приложении Г.
Данная программка написана с внедрением языка программирования С.
В главной функции объявляется таблица Виженера с помощью двумерного массива alfavit[27][27].
В данной для нас функции осуществляется вызов функции шифрования.
Для вывода сообщений на экран употребляются функции printf() и puts(). А для ввода данных употребляются функции scanf() и cin().
Для организации циклов в этих функциях употребляются операторы с предусловием while и с параметрическим циклом for.
3. Экспериментальная проверка работы программки
Для проверки работы программки, выполняющей шифрование по таблице Виженера возьмем, к примеру слово «welcome», а главным эмблемой будет являться, к примеру знак «a».
Опосля шифрования был получен последующий шифротекст:«wapnqaq»
Для проверки работы программки расшифрования по таблице Виженера возьмём тот же шифротекст «wapnqaq» при всем этом главным эмблемой должен являться знак «a». При расшифровки получим начальный текст «welcome».
Заключение
В итоге выполнения курсового проекта была разработана программка, реализующая криптографический метод шифрования и расшифрования с внедрением открытого текста в качестве ключа по таблице Виженера. Разработанная программка написана на языке Си.
Также была выполнена экспериментальная проверка работы данной программки, подтверждающая корректность шифрования.
В окончании работы была оформлена объяснительная записка, содержащая описание разработки программки, осуществляющей по таблице Виженера.
Таковым образом, задание на курсовую работу выполнено в полном объеме.
Перечень использованных источников
1. Керниган Б., Ритчи Д. язык программирования Си.Пер. с англ., 3-е изд., испр – СПб.: «Невский Диалект», 2001. – 352с.:ил.
2.
Алферов А.П., Зубов А.Ю., Кузьмин А.С., Черемушкин А.В. Базы криптографии: Учебное пособие. – М.: Гелиос АРВ, 2001. – 480 с.
3.
Базы криптологии. Шифры подмены. Методические указания к практическим занятиям по дисциплине «Базы криптологии». / Составители М.М. Грунтович, С.М. Геращенко – Пенза: Пензен. госуд. ун‑т, 2005.
4. Информатика: Базисный курс С.В. Симонович и др. – СПб,: Питер,2001. – 640 с.
приложение А
Метод программки шифрования и расшифрования
шифрование либо расшифрование
приложение Б
Метод функции шифрования
ПРИЛОЖЕНИЕ В
Метод функции расшифрования
приложение Г
Листинг программки шифрования и расшифрования
#include <stdio.h>
#include <string.h>
#include <iostream.h>
#include <stdlib.h>
void main()
{int b;
int f;
int z2;
int z1;
int y;
int y1;
char x1[20]={0};
char x2;
char x3[20]={0};
char x5[20]={0};
char filename[40];
FILE*text;
int r=0;
char c;
int i;
int i1;
int j;
int j1;
char t1[20]={0};
char t2;
char t5[20];
static char alfavit[27][27]={
{‘ ‘,’a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’,’k’,’l’,’m’,’n’,’o’,’p’,’q’,’r’,’s’,’t’,’u’,’v’,’w’,’x’,’y’,’z’},
{‘a’,’a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’,’k’,’l’,’m’,’n’,’o’,’p’,’q’,’r’,’s’,’t’,’u’,’v’,’w’,’x’,’y’,’z’},
{‘b’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’,’k’,’l’,’m’,’n’,’o’,’p’,’q’,’r’,’s’,’t’,’u’,’v’,’w’,’x’,’y’,’z’,’a’},
{‘c’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’,’k’,’l’,’m’,’n’,’o’,’p’,’q’,’r’,’s’,’t’,’u’,’v’,’w’,’x’,’y’,’z’,’a’,’b’},
{‘d’,’d’,’e’,’f’,’g’,’h’,’i’,’j’,’k’,’l’,’m’,’n’,’o’,’p’,’q’,’r’,’s’,’t’,’u’,’v’,’w’,’x’,’y’,’z’,’a’,’b’,’c’},
{‘e’,’e’,’f’,’g’,’h’,’i’,’j’,’k’,’l’,’m’,’n’,’o’,’p’,’q’,’r’,’s’,’t’,’u’,’v’,’w’,’x’,’y’,’z’,’a’,’b’,’c’,’d’},
{‘f’,’f’,’g’,’h’,’i’,’j’,’k’,’l’,’m’,’n’,’o’,’p’,’q’,’r’,’s’,’t’,’u’,’v’,’w’,’x’,’y’,’z’,’a’,’b’,’c’,’d’,’e’},
{‘g’,’g’,’h’,’i’,’j’,’k’,’l’,’m’,’n’,’o’,’p’,’q’,’r’,’s’,’t’,’u’,’v’,’w’,’x’,’y’,’z’,’a’,’b’,’c’,’d’,’e’,’f’},
{‘h’,’h’,’i’,’j’,’k’,’l’,’m’,’n’,’o’,’p’,’q’,’r’,’s’,’t’,’u’,’v’,’w’,’x’,’y’,’z’,’a’,’b’,’c’,’d’,’e’,’f’,’g’},
{‘i’,’i’,’j’,’k’,’l’,’m’,’n’,’o’,’p’,’q’,’r’,’s’,’t’,’u’,’v’,’w’,’x’,’y’,’z’,’a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’},
{‘j’,’j’,’k’,’l’,’m’,’n’,’o’,’p’,’q’,’r’,’s’,’t’,’u’,’v’,’w’,’x’,’y’,’z’,’a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’},
{‘k’,’k’,’l’,’m’,’n’,’o’,’p’,’q’,’r’,’s’,’t’,’u’,’v’,’w’,’x’,’y’,’z’,’a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’},
{‘l’,’l’,’m’,’n’,’o’,’p’,’q’,’r’,’s’,’t’,’u’,’v’,’w’,’x’,’y’,’z’,’a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’,’k’},
{‘m’,’m’,’n’,’o’,’p’,’q’,’r’,’s’,’t’,’u’,’v’,’w’,’x’,’y’,’z’,’a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’,’k’,’l’},
{‘n’,’n’,’o’,’p’,’q’,’r’,’s’,’t’,’u’,’v’,’w’,’x’,’y’,’z’,’a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’,’k’,’l’,’m’},
{‘o’,’o’,’p’,’q’,’r’,’s’,’t’,’u’,’v’,’w’,’x’,’y’,’z’,’a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’,’k’,’l’,’m’,’n’},
{‘p’,’p’,’q’,’r’,’s’,’t’,’u’,’v’,’w’,’x’,’y’,’z’,’a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’,’k’,’l’,’m’,’n’,’o’},
{‘q’,’q’,’r’,’s’,’t’,’u’,’v’,’w’,’x’,’y’,’z’,’a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’,’k’,’l’,’m’,’n’,’o’,’p’},
{‘r’,’r’,’s’,’t’,’u’,’v’,’w’,’x’,’y’,’z’,’a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’,’k’,’l’,’m’,’n’,’o’,’p’,’q’},
{‘s’,’s’,’t’,’u’,’v’,’w’,’x’,’y’,’z’,’a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’,’k’,’l’,’m’,’n’,’o’,’p’,’q’,’r’},
{‘t’,’t’,’u’,’v’,’w’,’x’,’y’,’z’,’a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’,’k’,’l’,’m’,’n’,’o’,’p’,’q’,’r’,’s’},
{‘u’,’u’,’v’,’w’,’x’,’y’,’z’,’a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’,’k’,’l’,’m’,’n’,’o’,’p’,’q’,’r’,’s’,’t’},
{‘v’,’v’,’w’,’x’,’y’,’z’,’a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’,’k’,’l’,’m’,’n’,’o’,’p’,’q’,’r’,’s’,’t’,’u’},
{‘w’,’w’,’x’,’y’,’z’,’a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’,’k’,’l’,’m’,’n’,’o’,’p’,’q’,’r’,’s’,’t’,’u’,’v’},
{‘x’,’x’,’y’,’z’,’a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’,’k’,’l’,’m’,’n’,’o’,’p’,’q’,’r’,’s’,’t’,’u’,’v’,’w’},
{‘y’,’y’,’z’,’a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’,’k’,’l’,’m’,’n’,’o’,’p’,’q’,’r’,’s’,’t’,’u’,’v’,’w’,’x’},
{‘z’,’z’,’a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’,’k’,’l’,’m’,’n’,’o’,’p’,’q’,’r’,’s’,’t’,’u’,’v’,’w’,’x’,’y’},};
while (1)
{printf(«nVvedite 1 dlya shifrovaniya nVvedite 2 dlya rasshifrovaniyanVvedite 3 dlya vihodan»);
scanf(«%d»,&b);
switch (b)
{case 1: printf(«%d — shifrovaniyen»,b);
printf(«nVibor regima:n1 from klavan2 from filen»);
scanf(«%d»,&f);
switch(f)
{case 1: printf(«Vvedite slovon»);
cin>>x1;
printf(«nVvedite kluchevoy simvoln»);
cin>>x2;
for ( z2=strlen(x1)-1;z2>0;z2—)
{x3[z2]=x1[z2-1];}
x3[0]=x2;
x3[strlen(x1)]=’