Разработка программы шифрования

 

Введение

программа пользователь шифрование

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

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

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

Актуальность курсовой работы - благодаря курсовой работе я освоила новые, для меня, методы, функции и конструкции в Turbo Pascal, а так же расширила свой кругозор в области шифрования текста.

Объект курсовой работы - это создание программного продукта.

Предмет курсовой работы - это программный продукт, реализующий такие методы шифрования как шифр Цезаря, шифр с заменой букв цифрами и шифр Полибиуса.

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

Для достижения этой цели были поставлены следующие задачи:

¾изучить теоретические сведения, необходимые для решения данной задачи;

¾систематизировать и обобщить полученные знания;

¾создать пользовательский интерфейс;

¾создать программный продукт реализующий, реализующий три шифра.

¾Провести тестирование и отладку программы.

Цель и задачи курсовой работы определили её структуру. Она состоит из введения, двух разделов, заключения, списка литературы и приложений.

В первом разделе рассмотрена история появления и развития методов шифрования.

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

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

В приложении представлены блог-схема, описывающая структуру программы, и листинг разработанного программного продукта.



1. Исследование и анализ предметной области


.1 История появления и развития методов шифрования


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

На заре бронзового века писцов Ближнего Востока обучали искусству расшифровки запутанных и закодированных текстов. Глиняная табличка из Угарита (Сирия), относящаяся приблизительно к 1200 г. до н.э., представляет простое студенческое упражнение, в котором требовалось найти ответ на анаграмму из четырех букв.

Древние писцы разгадывали гораздо более сложные загадки. Наиболее популярной из них было использование акростиха, когда скрытое сообщение прочитывали, сложив вместе первые буквы каждой строки текста. Прекрасным примером этого служит глиняная табличка из Ирака середины 2 тысячелетия до н.э., известная в настоящее время как «Вавилонская теодицея». Этот текст хорошо читается как поэма из 27 строф (по 11 строк в каждой), где дается мудрый совет по религиозным вопросам. Но в нем содержится также искусно составленный текст, в котором начальные слоги каждой строфы, образующей акростих, составляют имя и данные автора: «Я, Шагил-Кинам-аббиб, заклинатель, служитель Бога и Царя». За века своего существования человечество придумало множество способов хранения тайны.

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

Симметричные криптосистемы (с секретным ключом - secret key systems) - данные криптосистемы построены на основе сохранения в тайне ключа шифрования. Процессы зашифрования и расшифрования используют один и тот же ключ. Секретность ключа является постулатом.

Асимметричные криптосистемы (системы открытого шифрования - с открытым ключом public key systems) - смысл данных криптосистем состоит в том, что для зашифрования и расшифрования используются разные преобразования. Одно из них - зашифрование - является абсолютно открытым для всех. Другое же - расшифрование - остается секретным.

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


Рис. 1.1 Модель процесса шифрования и дешифрования


1.2 Методы шифрования


Самым простым шифром является ШИФР С ЗАМЕНОЙ БУКВ ЦИФРАМИ. Каждой букве соответствует число по алфавитному порядку. А-1, B-2, C-3 и т.д.

Книжный шифр

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

Шифр с кодовым словом

Еще один простой способ как в шифровании, так и в расшифровке. Используется кодовое слово (любое слово без повторяющихся букв). Данное слово вставляется впереди алфавита и остальные буквы по порядку дописываются, исключая те, которые уже есть в кодовом слове. Пример: кодовое слово - NOTEPAD.

Исходный: 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
Замена: N O T E P A D B C F G H I J K L M Q R S U V W X Y Z
Цифровой таблицы

Её параметры могут быть какими угодно, главное чтобы получатель и отправитель были в курсе. Пример цифровой таблицы.


Таблица 1.1. Цифровая таблица

123451ABCDE2FGHIJ3KLMNO4PQRST5UVWXY6Z123475678980.,?!

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



Рис. 1.2 Масонский шифр


Шифр цезаря

Он является историческим примером шифра замены (1 век до н.э.), описанным историком Древнего Рима Светонием. Гай Юлий Цезарь использовал в своей переписке шифр собственного изобретения. Применительно к современному русскому языку он состоял в следующем. Выписывался алфавит, затем под ним выписывался тот же алфавит, но с циклическим сдвигом на 3 буквы влево:

АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЫЪЬЭЮЯ

ГДЕЁЖЗИЙКЛМНОП РСТУФХЦ ЧШ ЩЫЪЬ ЭЮЯАБВ

Математическая модель

Если сопоставить каждому символу алфавита его порядковый номер (нумеруя с 0), то шифрование и дешифрование можно выразить формулами:



где x - символ открытого текста, - символ шифрованного текста, - мощность алфавита (кол-во символов),- ключ.

Теоретический анализ литературы позволяет выделить перспективное направление разработки методов шифрования. В работе предлагается создание программы с использованием трёх методов шифрования: шифр Цезаря, шифр с заменой букв цифрами и шифр Полибиуса. Все эти шифры достаточно просты для понимания и дешифрования, но в этом то и заключается цель - создание пользовательской программы для развития детей.

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

Шифр Полибия

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

Методы вскрытия одноалфавитных систем

При своей простоте в реализации одноалфавитные системы легко уязвимы. Определим количество различных систем в аффинной системе. Каждый ключ полностью определен парой целых чисел a и b, задающих отображение ax+b. Для а существует j(n) возможных значений, где j(n) - функция Эйлера, возвращающая количество взаимно простых чисел с n, и nзначений для b, которые могут быть использованы независимо от a, за исключением тождественного отображения (a=1 b=0), которое мы рассматривать не будем. Таким образом получается j(n)*n-1 возможных значений, что не так уж и много: при n=33 в качестве a могут быть 20 значений (1, 2, 4, 5, 7, 8, 10, 13, 14, 16, 17, 19, 20, 23, 25, 26, 28, 29, 31, 32), тогда общее число ключей равно 20*33-1=659. Перебор такого количества ключей не составит труда при использовании компьютера. Но существуют методы упрощающие этот поиск и которые могут быть использованы при анализе более сложных шифров.

Многоалфавитные системы

Полиалфавитные подстановочные шифры были изобретены Лином Баттистой (Lean Battista) в 1568 году. Основная идея многоалфавитных систем состоит в том, что на протяжении всего текста одна и та же буква может быть зашифрована по-разному. Т.е. замены для буквы выбираются из многих алфавитов в зависимости от положения в тексте. Это является хорошей защитой от простого подсчета частот, так как не существует единой маскировки для каждой буквы в криптотексте. В данных шифрах используются множественные однобуквенные ключи, каждый из которых используется для шифрования одного символа открытого текста. Первым ключом шифруется первый символ открытого текста, вторым - второй, и т.д. После использования всех ключей они повторяются циклически.

Шифр Вернама

Шифр Вернама, или одноразовый блокнот, был изобретен в 1917 году Мейджором Джозефом Моборном (Major Joseph Mauborn) и Гильбертом Вернамом (Gilbert Vernam) из AT&T (American Telephone & Telegraph). В классическом понимании одноразовый блокнот является большой неповторяющейся последовательностью символов ключа, распределенных случайным образом. Первоначально это была одноразовая лента для телетайпов. Отправитель использовал каждый символ ключа для шифрования только одного символа открытого текста. Шифрование представляет собой сложение по модулю n (мощность алфавита) символа открытого текста и символа ключа из одноразового блокнота. Каждый символ ключа используется только один раз и для единственного сообщения, иначе даже если использовать блокнот размером в несколько гигабайт, при получении криптоаналитиком нескольких текстов с перекрывающимися ключами он сможет восстановить исходный текст. Он сдвинет каждую пару шифротекстов относительно друг друга и подсчитает число совпадений в каждой позиции. если шифротексты смещены правильно, соотношение совпадений резко возрастет. С этой точки зрения криптоанализ не составит труда. Если же ключ не повторяется и случаен, то криптоаналитик, перехватывает он тексты или нет, всегда имеет одинаковые знания. Случайная ключевая последовательность, сложенная с неслучайным открытым текстом, дает совершенно случайный криптотекст, и никакие вычислительные мощности не смогут это изменить.

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

Главным недостатком данной системы является то, что для каждого бита переданной информации должен быть заранее подготовлен бит ключевой информации, причем эти биты должны быть случайными. При шифровании большого объема данных это является серьезным ограничением. Поэтому данная система используется только для передачи сообщений наивысшей секретности. По слухам «горячая линия» между США и СССР шифровалась с помощью одноразового блокнота. Многие сообщения советских шпионов были зашифрованы с использованием одноразовых блокнотов. Эти сообщения нераскрыты сегодня, и не будут раскрыты никогда (если не найдется способа вернуться в прошлое и достать эти блокноты


.3 Обзор существующих программ


На данный момент программы для зашифровки текстом пока еще не использовались, с развивающей целью, но программ шифрующих информацию с целью секретности существует о множество:Word - бесплатная программа для шифрования и расшифровки текстов. Это надежное и простое в использовании приложение позволяет быстро зашифровать и расшифровать текст с помощью пароля.- программа для защиты файлов. С помощью этой программы можно защитить папки и файлы функцией двойной идентификации пользователя.- это бесплатная программа которая позволяет шифровать данные в операционных системах Windows Vista/XP/Seven, Mac OS X и Linux.Steganography - программа. которая поможет скрыть текст или файлы внутри изображений.

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



2. Реализация и тестирование программного продукта, описание результатов


.1 Требования к программному продукту


При разработке программного продукта требовалось решить следующие задачи:

.Формирование меню,

.Формирование процедур, реализующих методы шифрования,

.Вывод результата на экран,

.Остановка программы и выход.


.2 Меню


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

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

Суть работы подпрограммы заключается в том что на экран последовательно выводятся команды:

.Для начала пользователь должен выбрать метод, с помощью которого он хочет зашифровать текст. На экран выводится - «Выберете способ шифрования

-шифр Цезаря, 2-шифр с заменой букв цифрами, 3-шифр Полибиуса»

.Пользователь выбирает, нажимая номер нужного ему шифра.

.Если же он не хочет шифровать или уже закончил занятие, тогда для выхода из цикла ему следует нажать 0. Сообщение с этой информацией выводится на экран вместе со всеми предыдущими ¾ «Для выхода нажмите 0».

Меню управляется клавиатурой: для выбора следует нажать требуемый номер и ENTER.


.3 Описание пользовательских подпрограмм


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

Программный продукт состоит из пользовательских подпрограмм,

листинг которых представлены в Приложении 2.

Для выбора метода шифрования была создана подпрограмма:

Procedure Menu (t, t1:integer); где t и t1 ¾переменные выбора.

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

Procedure Cezarzash (a:string); где а - строка. Эта процедура реализует шифрование Цезаря.

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

Procedure Cifrzash (a:string); где а - строка. Эта процедура реализует шифр с заменой букв цифрами. Задается два массива типа Char и типа Integer затем последовательно присваиваются значения: в зашифровке буквам - числа, в дешифровке - наоборот.

Procedure Polibiuszash (a:string); Эта процедура реализует шифрование методом Полибиуса.

Более того в каждой подпрограмме есть условие выбора - зашифровать или расшифровать текст. Это условие реализуется с помощью условного оператора if…then..else. Если же нет текста, который надо расшифровать, то выводится сообщение - «Нет данных для расшифровки».


.4 Руководство для пользователя


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


Рис. 2.1Запуск программы


После выбора шифра выводится еще одно предложение - зашифровать или расшифровать текст.


Рис. 2.2 Выбор процедуры

Затем выходит сообщение с просьбой ввести текст.


Рис. 2.3 Сообщение о вводе текста


В шифре Цезаря так же выходит сообщение с просьбой ввести ключ.


Рис. 2.4 Ввод ключа


После выбора метода, команды зашифровать, и ввода текста - на экран выводится зашифрованный текст. После выбора расшифровки выводится расшифрованный текст.



Рис. 2.5 Вывод результата


2.5 Анализ полученных результатов


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

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




Заключение

программа пользователь шифрование

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

При достижения поставленной цели были решены следующие задачи:

.Изучены аналогичные программные продукты,

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

.Систематизированы и обобщены полученные знания,

.Создан программный продукт, реализующий три метод шифрования.

При разработке программного продукта были усвоены функции ctr() и val(), преобразующие информацию из численного типа в строковый и наоборот, так же были окончательно усвоены условные операторы if…then..else и for. … to…do.

В ходе тестирования программного продукта были выявлены следующие недостатки:

.В ходе работы программы обнаруживаются ошибки.

.В программе не совсем удобное для восприятия меню.

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



Список литературы


1.ItSphera [Электронный ресурс]:статья «Криптографические методы и средства защиты информации» © 2010-2014 IT Sphera. Внедрение, сопровождение, обновление 1С в Курске.

2.Клод Шеннон - американский инженер и математик «Математическая теория связи». 1945 г.

.Анин Б. «Защита компьютерной информации»¾Санкт-Петербург.2000¾384 с.

.Байтурин В.Б., Бровкова М.Б., Пластун И.Л. «Введение в защиту информации»¾Москва Форум¾ИНФРА¾М2000г.¾107 с.

.Х.К.А.ван Тилборг Основы Криптологии. Профессиональное руководство и интерактивный учебник. - М., Мир, 2006. - 471 стр.

.Ростовцев А.Г., Маховенко Е.Б. Теоретическая криптография. - М., Изд. Профессионал, 2005. - 490 стр.

.В.А. Мухачев, В.А. Хорошко Методы практической криптографии. - М., Изд. Полиграф-Консалтинг, 2005. - 209 стр.

.Брюс Шнайер, Прикладная криптография. Протоколы, алгоритмы, исходные тексты на языке Си, неофициальный перевод 2-ого издания 1996 г.в.

.Панасенко С. Алгоритмы шифрования. Специальный справочник. - СПб: БХВ-Петербург, 2009 г., 576 с.

.Баричев С. Криптография без секретов. - 2004. - 43 стр.

.Баричев С.Г., Серов Р.Е. Основы современной криптографии. - Горячая Линия - Телеком, 2002 - 153 с.



Приложение


program shifri;t, t1:integer;:string;

Cezarzash (a:string);v, v1, i, j, k, d, d1, s:integer;, b, g:string;('1-Зашифровать');('2-Расшифровать');(v);(v=1) then1:=v;

writeln ('Введите слово');

readln(a);('ключ');(d);:='';:=(' абвгдеёжзийклмнопрстуфхцчшщъыьэюя');i:=1 to length(a) doj:=1 to length(b) do:=(j+d);a[i]=b[j] then c:=c+b[k];;(c);;((v=2) and (v1<>1)) then

begin('Нат данных для расшифровки');

end;((v=2) and (v1=1)) then:='';('Расшифровка');('Введите ключ');(d1);i:=1 to length(c) doj:=1 to length(b) do:=k-d1;c[i]=b[j] then g:=g+b [j-d1];;(g);;;;

cifrzash (a:string);e, i, v, v1:integer;:array [1..256] of integer;:array [1..256] of char;:string;('1-Зашифровать');('2-Расшифровать');(v);(v=1) then:=1;('Введите текст');(s);:=0;i:=1 to length(s) do((s[i]='a') or (s[i]='A')) then mas[i]:=1;((s[i]='b') or (s[i]='B')) then mas[i]:=2;((s[i]='c') or (s[i]='C')) then mas[i]:=3;((s[i]='d') or (s[i]='D')) then mas[i]:=4;((s[i]='e') or (s[i]='e')) then mas[i]:=5;((s[i]='f') or (s[i]='F')) then mas[i]:=6;((s[i]='g') or (s[i]='G')) then mas[i]:=7;((s[i]='h') or (s[i]='H')) then mas[i]:=8;((s[i]='i') or (s[i]='I')) then mas[i]:=9;((s[i]='j') or (s[i]='J')) then mas[i]:=10;((s[i]='k') or (s[i]='K')) then mas[i]:=11;((s[i]='l') or (s[i]='L')) then mas[i]:=12;((s[i]='m') or (s[i]='M')) then mas[i]:=13;((s[i]='n') or (s[i]='N')) then mas[i]:=14;((s[i]='o') or (s[i]='O')) then mas[i]:=15;((s[i]='p') or (s[i]='P')) then mas[i]:=16;((s[i]='q') or (s[i]='G')) then mas[i]:=17;((s[i]='r') or (s[i]='R')) then mas[i]:=18;((s[i]='s') or (s[i]='S')) then mas[i]:=19;((s[i]='t') or (s[i]='T')) then mas[i]:=20;((s[i]='u') or (s[i]='U')) then mas[i]:=21;((s[i]='v') or (s[i]='V')) then mas[i]:=22;((s[i]='w') or (s[i]='W')) then mas[i]:=23;((s[i]='x') or (s[i]='X')) then mas[i]:=24;((s[i]='y') or (s[i]='Y')) then mas[i]:=25;((s[i]='z') or (s[i]='Z')) then mas[i]:=25;;i:=1 to length(s) do(mas[i]);;;;((v=2) and (v1<>1)) then

begin('Нет даных дря расшифровки');

end;((v=2) and (v1=1)) then(' ');('Расшифровка');i:=1 to length(s) do(mas[i]=1) then zak[i]:='a';(mas[i]=2) then zak[i]:='b';(mas[i]=3) then zak[i]:='c';(mas[i]=4) then zak[i]:='d';(mas[i]=5) then zak[i]:='e';(mas[i]=6) then zak[i]:='f';(mas[i]=7) then zak[i]:='g';(mas[i]=8) then zak[i]:='h';(mas[i]=9) then zak[i]:='i';(mas[i]=10) then zak[i]:='j';(mas[i]=11) then zak[i]:='k';(mas[i]=12) then zak[i]:='l';(mas[i]=13) then zak[i]:='m';(mas[i]=14) then zak[i]:='n';(mas[i]=15) then zak[i]:='o';(mas[i]=16) then zak[i]:='p';(mas[i]=17) then zak[i]:='q';(mas[i]=18) then zak[i]:='r';(mas[i]=19) then zak[i]:='s';(mas[i]=20) then zak[i]:='t';(mas[i]=21) then zak[i]:='u';(mas[i]=22) then zak[i]:='v';(mas[i]=23) then zak[i]:='w';(mas[i]=24) then zak[i]:='x';(mas[i]=25) then zak[i]:='y';(mas[i]=26) then zak[i]:='z';;(' ');i:=1 to length(s) do(zak[i]);;;;;

polibiuszash (a:string);, t, t1, zash, rash:string;, j, h, m, k, k1, code, n, v, v1:integer;:array [1.. 3,1..10] of char;:='';:=97;:=9;i:=1 to 3 doj:=1 to m doi=3 then:=m-1;;[i, j]:=char(n);:=n+1;;;('1-Зашифровать');('2-Расшифровать');(v);(v=1) then:=1;('Введите текст');(a);:='';h:=1 to length(a) doi:=1 to 3 doj:=1 to 9 do(a[h]=a1 [i, j]) then(i, t);(j, t1);:=zash+t+t1;;(zash);;((v=2) and (v1<>1)) then

writeln ('Нет даннфх для расшифровки');

end;((v=2) and (v1=1)) then:='';h:=1 to length(zash) doi:=1 to 3 doj:=1 to 9 do(zash[h], k, code);(zash[h+1], k1, code);((k=i) and (k1=j)) then:=rash+a1 [i, j];:=h+1;;;;(rash);;;

menu (t, t1:integer);t<>0 do begin('Выберете способ шифрования');

writeln ('1-шифр Цезаря, 2-шифр с заменой букв цифрами, 3-шифр Полибиуса ');('Для выхода нажмите 0');

readln(t);(t=0) then break;(t=1) then Cezarzash(a);(t=2) then Cifrzash(a);(t=3) then Polibiuszash(a);;;:=1;(t, t1);

readln;.


Введение программа пользователь шифрование Шифрование - это преобразование информации, делающее ее нечитаемой для посторонних. При этом доверенные лица мо

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ