Всё сдал! - помощь студентам онлайн Всё сдал! - помощь студентам онлайн

Реальная база готовых
студенческих работ

Узнайте стоимость индивидуальной работы!

Вы нашли то, что искали?

Вы нашли то, что искали?

Да, спасибо!

0%

Нет, пока не нашел

0%

Узнайте стоимость индивидуальной работы

это быстро и бесплатно

Получите скидку

Оформите заказ сейчас и получите скидку 100 руб.!


Программная реализация криптографического алгоритма шифрования с использованием открытого текста

Тип Реферат
Предмет Информатика
Просмотров
1203
Размер файла
47 б
Поделиться

Ознакомительный фрагмент работы:

Программная реализация криптографического алгоритма шифрования с использованием открытого текста

Федеральное агентство по образованию

Пензенский государственный университет

Кафедра «Информационной безопасности систем и технологий»

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовому проекту на тему

“ Программная реализация криптографического алгоритма шифрования с использованием открытого текста в качестве ключа ”

ПГУ 3.090105.001 ПЗ

Дисциплина: КМЗИ

Группа:

Разработал студент:

Работа принята с оценкой:

Руководитель проекта:

Пенза 2006г.


Реферат

Пояснительная записка содержит 24 страниц, 4 источника, 4 приложения.

ТАБЛИЦА ВИЖЕНЕРА, АЛФАВИТ, ОТКРЫТЫЙ ТЕКСТ, ШИФРОТЕКСТ, ШИФРОВАНИЕ, РАСШИФРОВАНИЕ.

Объектом исследования является шифр по таблице Виженера.

Целью работы является реализация криптографического алгоритма шифрования с использованием открытого текста в качестве ключа по таблице Виженера.

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

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


Содержание

Реферат

Задание

Введение

1 Разработка алгоритма программы ручного шифра по таблице Виженера

1.1 Функция шифрования

1.2 Функция расшифрования

2 Разработка программы, выполняющей шифрование и расшифрование по таблице Виженера

3 Экспериментальная проверка работы программы

Заключение

Список использованных источников

Приложение А. Обязательное. Алгоритм программы шифрования и расшифрования

Приложение Б. Обязательное. Алгоритм функции шифрования

Приложение В. Обязательное. Алгоритм функции расшифрования

Приложение Г. Обязательное. Листинг программы шифрования и расшифрования


Введение

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

Без использования криптографии сегодня немыслимо решение задач по обеспечению безопасности информации, связанных с конфиденциальностью и целостностью. Если до 1990г. криптография обеспечивала закрытие государственных линий связи, то в наши дни использование криптографических методов получило широкое распространение благодаря развитию компьютерных сетей и электронного обмена данными в различных областях[2].

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

Данная курсовая работа написана на языке С.

Разработанная программа обладает интерактивным интерфейсом. Методы и средства взаимодействия с аппаратными и программными средствами называют пользовательским интерфейсом [4].

С – это универсальный язык программирования с компактным способом записи выражений, современными механизмами управления структурами данных и богатым набором операторов[1].

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

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

Разумеется, «сложность» выполнения математической операции зависит от применяемого алгоритма и, в конечном счёте, сводится к оценке числа так называемых «элементарных» операций, составляющих алгоритм вычисления. Если иметь в виду, что алгоритм математической операции реализуется на ЭВМ, то при данных параметрах ЭВМ (скорость вычисления, объём долговременной и оперативной памяти) «сложность» математической операции может быть оценена временем её выполнения на ЭВМ. Существует тривиальные алгоритмы, основанные на последовательном переборе всех возможных вариантов решения и выделении среди них истинного варианта. Однако такой «силовой» метод требует больших временных затрат и на практике невыполним, если параметры задачи ( в примерах – это величена чисел, разлагаемого на простые множители; свойство многочлена и величина степени, в которую он возводится) достаточно велики.

Поиск и разработка эффективных алгоритмов для выполнения некоторых математических операций или доказательство невозможности их построения представляют сложную математическую проблему, над решением которой упорно работают математики всего мира. В последние годы получены некоторые успехи в этой области, что, конечно, заставило переоценить стойкость некоторых шифросистем, построенных на основе применения «открытого» ключа. Однако существуют проблемы, где продвижения в поисках эффективных алгоритмов оказались недостаточными для их практической реализации или требуют чрезвычайно больших материальных и временных затрат. ТО, что над этими проблемами работают самые квалифицированные математики всего мира, пытаясь улучшить алгоритмы решения «обратных» задач, даёт основание полагать, что на определённый период времени такого рода «сложные» математические операции могут обеспечивать криптографическую стойкость шифросистем, построенных с их использованием. Именно к таким проблемам относится « дискретное логарифмирование»[3].


1. Разработка алгоритма программы ручного шифра по таблице Виженера

Алгоритм программы шифрования и расшифрования приведен в приложении А.

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

1.1 Функция шифрования

Алгоритм функции шифрования приведен в приложении Б.

Виженер высказывает идею использования в качестве ключа самого открытого текста. При шифровании применяется таблица Тритемия, слегка модифицированную Виженером (см. таблицу 1). Заранее оговаривается одна ключевая буква алфавита, обозначим ее через t0. Она используется как ключ при шифровании первой буквы текста t1. Последовательность букв открытого текста t1 t2 … подписывается под ключевой последовательностью t0 t1 t2 …:

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

1.2 Функция расшифрования

Алгоритм функции расшифрования приведён в приложении В.

При расшифровании открытый текст, являющийся частью ключевой последовательности, нам изначально неизвестен. Но если расшифровывающий знает букву ключа t0, он может расшифровать первую букву шифрованного текста s1: для этого находим в строке таблицы Виженера (см. таблицу 1) с номером t0 букву s1, t1 есть номер столбца, в котором она находится (буква того же столбца в первой строке). Вписываем эту букву над s2 и расшифровываем вторую букву. И т.д.

Таблица 1. Таблица Виженера

abcdefghijklmnopqrstuvwxyz
aabcdefghijklmnopqrstuvwxyz
bbcdefghijklmnopqrstuvwxyza
ccdefghijklmnopqrstuvwxyzab
ddefghijklmnopqrstuvwxyzabc
eefghijklmnopqrstuvwxyzabcd
ffghijklmnopqrstuvwxyzabcde
gghijklmnopqrstuvwxyzabcdef
hhijklmnopqrstuvwxyzabcdefg
iijklmnopqrstuvwxyzabcdefgh
jjklmnopqrstuvwxyzabcdefghi
kklmnopqrstuvwxyzabcdefghij
llmnopqrstuvwxyzabcdefghijk
mmnopqrstuvwxyzabcdefghijkl
nnopqrstuvwxyzabcdefghijklm
oopqrstuvwxyzabcdefghijklmn
ppqrstuvwxyzabcdefghijklmno
qqrstuvwxyzabcdefghijklmnop
rrstuvwxyzabcdefghijklmnopq
sstuvwxyzabcdefghijklmnopqr
ttuvwxyzabcdefghijklmnopqrs
uuvwxyzabcdefghijklmnopqrst
vvwxyzabcdefghijklmnopqrstu
wwxyzabcdefghijklmnopqrstuv
xxyzabcdefghijklmnopqrstuvw
yyzabcdefghijklmnopqrstuvwx
zzabcdefghijklmnopqrstuvwxy

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)]=' ';

printf("nSlovo dlya shifrovaniya: %sn",x1);

printf("nKluchevoy simvol: %cn",x2);

printf("nKluchevaiya posledovatel'nost': %sn",x3);

int z3;

for (z3=0;z3<20;z3++)

{z1 = y1 = 0;

if((x1[z3] !=' ')||(x3[z3] !=' '))

{for (z2=0;z2<27;z2++)

if (alfavit[0][z2]==x1[z3])

{z1=z2;

break;}

for (y=0;y<27;y++)

if (alfavit[y][0]==x3[z3])

{y1=y;

break;}

x5[z3]=alfavit[y1][z1];}

else

break;}

x5[z3] = ' ';

printf("nShifrotekst: %sn",x5);

break;

case 2: puts("Put name of file with open text:n");

scanf("%s",&filename);

text=fopen(filename,"r");

while(!(feof(text)))

{c=getc(text);

r++;}

fseek(text,0,0);

i=0;

while(r!=1)

{c=getc(text);

x1[i]=c;

r--;

i++;}

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)]=' ';

printf("nSlovo dlya shifrovaniya: %sn",x1);

printf("nKluchevoy simvol: %cn",x2);

printf("nKluchevaiya posledovatel'nost': %sn",x3);

for (z3=0;z3<20;z3++)

{z1 = y1 = 0;

if((x1[z3] !=' ')||(x3[z3] !=' '))

{for (z2=0;z2<27;z2++)

if (alfavit[0][z2]==x1[z3])

{z1=z2;

break;}

for (y=0;y<27;y++)

if (alfavit[y][0]==x3[z3])

{y1=y;

break;}

x5[z3]=alfavit[y1][z1];}

else

break;}

x5[z3] = ' ';

printf("nShifrotekst: %sn",x5);

fclose(text);

break;

default: return;}

break;

case 2: printf("%d - rasshifrovaniyen",b);

printf("nVibor regima:n1 from klavan2 from filen");

scanf("%d",&f);

switch(f)

{case 1:printf("nVvedite shifrotekst:n");

cin>>t1;

printf("nVvedite kluchevoy simvol:n");

cin>>t2;

printf("nShifrotekst: %sn",t1);

printf("nKluchevoy simvol: %cn", t2);

int i2;

for (i2=0;t1[i2];i2++)

{i1 = j1 = 0;

{for (i=0;i<32;i++)

if (alfavit[i][0]==t2)

{i1=i;

break;}

for (j=0;j<34;j++)

if (alfavit[i1][j]==t1[i2])

{j1=j;

break;}

t5[i2]=alfavit[0][j1];}

t2=t5[i2];}

t5[i2] = ' ';

printf("nOtkritiy tekst: %sn",t5);

break;

case 2:puts("Put name of file with open text:n");

scanf("%s",&filename);

text=fopen(filename,"r");

while(!(feof(text)))

{c=getc(text);

r++;}

fseek(text,0,0);

i=0;

while(r!=1)

{c=getc(text);

t1[i]=c;

r--;

i++;}

printf("nVvedite kluchevoy simvol:n");

cin>>t2;

printf("nShifrotekst: %sn",t1);

printf("nKluchevoy simvol: %cn", t2);

for (i2=0;t1[i2];i2++)

{i1 = j1 = 0;

{for (i=0;i<32;i++)

if (alfavit[i][0]==t2)

{i1=i;

break;}

for (j=0;j<34;j++)

if (alfavit[i1][j]==t1[i2])

{j1=j;

break;}

t5[i2]=alfavit[0][j1];}

t2=t5[i2];}

t5[i2] = ' ';

printf("nOtkritiy tekst: %sn",t5);

fclose(text);}

break;

case 3: return;

default: printf("%d - tolko 1 ili 2!!!n",b);

return;}}}


Нет нужной работы в каталоге?

Сделайте индивидуальный заказ на нашем сервисе. Там эксперты помогают с учебой без посредников Разместите задание – сайт бесплатно отправит его исполнителя, и они предложат цены.

Цены ниже, чем в агентствах и у конкурентов

Вы работаете с экспертами напрямую. Поэтому стоимость работ приятно вас удивит

Бесплатные доработки и консультации

Исполнитель внесет нужные правки в работу по вашему требованию без доплат. Корректировки в максимально короткие сроки

Гарантируем возврат

Если работа вас не устроит – мы вернем 100% суммы заказа

Техподдержка 7 дней в неделю

Наши менеджеры всегда на связи и оперативно решат любую проблему

Строгий отбор экспертов

К работе допускаются только проверенные специалисты с высшим образованием. Проверяем диплом на оценки «хорошо» и «отлично»

1 000 +
Новых работ ежедневно
computer

Требуются доработки?
Они включены в стоимость работы

Работы выполняют эксперты в своём деле. Они ценят свою репутацию, поэтому результат выполненной работы гарантирован

avatar
Математика
История
Экономика
icon
159599
рейтинг
icon
3275
работ сдано
icon
1404
отзывов
avatar
Математика
Физика
История
icon
156450
рейтинг
icon
6068
работ сдано
icon
2737
отзывов
avatar
Химия
Экономика
Биология
icon
105734
рейтинг
icon
2110
работ сдано
icon
1318
отзывов
avatar
Высшая математика
Информатика
Геодезия
icon
62710
рейтинг
icon
1046
работ сдано
icon
598
отзывов
Отзывы студентов о нашей работе
63 457 оценок star star star star star
среднее 4.9 из 5
Филиал государственного бюджетного образовательного учреждения высшего образования Московской област
Спасибо Елизавете за оперативность. Так как это было важно для нас! Замечаний особых не бы...
star star star star star
РУТ
Огромное спасибо за уважительное отношение к заказчикам, быстроту и качество работы
star star star star star
ТГПУ
спасибо за помощь, работа сделана в срок и без замечаний, в полном объеме!
star star star star star

Последние размещённые задания

Ежедневно эксперты готовы работать над 1000 заданиями. Контролируйте процесс написания работы в режиме онлайн

решить 6 практических

Решение задач, Спортивные сооружения

Срок сдачи к 17 дек.

только что

Задание в microsoft project

Лабораторная, Программирование

Срок сдачи к 14 дек.

только что

Решить две задачи №13 и №23

Решение задач, Теоретические основы электротехники

Срок сдачи к 15 дек.

только что

Решить 4задачи

Решение задач, Прикладная механика

Срок сдачи к 31 дек.

только что

Выполнить 2 задачи

Контрольная, Конституционное право

Срок сдачи к 12 дек.

2 минуты назад

6 заданий

Контрольная, Ветеринарная вирусология и иммунология

Срок сдачи к 6 дек.

4 минуты назад

Требуется разобрать ст. 135 Налогового кодекса по составу напогового...

Решение задач, Налоговое право

Срок сдачи к 5 дек.

4 минуты назад

ТЭД, теории кислот и оснований

Решение задач, Химия

Срок сдачи к 5 дек.

5 минут назад

Решить задание в эксель

Решение задач, Эконометрика

Срок сдачи к 6 дек.

5 минут назад

Нужно проходить тесты на сайте

Тест дистанционно, Детская психология

Срок сдачи к 31 янв.

6 минут назад

Решить 7 лабораторных

Решение задач, визуализация данных в экономике

Срок сдачи к 6 дек.

7 минут назад

Вариационные ряды

Другое, Статистика

Срок сдачи к 9 дек.

8 минут назад

Школьный кабинет химии и его роль в химико-образовательном процессе

Курсовая, Методика преподавания химии

Срок сдачи к 26 дек.

8 минут назад

Вариант 9

Решение задач, Теоретическая механика

Срок сдачи к 7 дек.

8 минут назад

9 задач по тех меху ,к 16:20

Решение задач, Техническая механика

Срок сдачи к 5 дек.

9 минут назад
9 минут назад
10 минут назад
planes planes
Закажи индивидуальную работу за 1 минуту!

Размещенные на сайт контрольные, курсовые и иные категории работ (далее — Работы) и их содержимое предназначены исключительно для ознакомления, без целей коммерческого использования. Все права в отношении Работ и их содержимого принадлежат их законным правообладателям. Любое их использование возможно лишь с согласия законных правообладателей. Администрация сайта не несет ответственности за возможный вред и/или убытки, возникшие в связи с использованием Работ и их содержимого.

«Всё сдал!» — безопасный онлайн-сервис с проверенными экспертами

Используя «Свежую базу РГСР», вы принимаете пользовательское соглашение
и политику обработки персональных данных
Сайт работает по московскому времени:

Вход
Регистрация или
Не нашли, что искали?

Заполните форму и узнайте цену на индивидуальную работу!

Файлы (при наличии)

    это быстро и бесплатно