Автор: Пользователь скрыл имя, 02 Апреля 2013 в 19:38, курсовая работа
В данном курсовом проекте были программно реализованы теоретические знания, полученные в течение всего семестра. Были рассмотрены методы нахождения энтропии зависимых и независимых систем, основные способы кодирования информации. В частности были реализованы методы кодирования Шеннона-Фано и кодирование по Хаффману. Реализованы были также основные методы помехоустойчивого кодирования, коды с обнаружением одиночной ошибки, коды с обнаружение и возможностью исправления одиночной ошибки. Рассмотрены способы шифрования входных сообщений, такие как метод шифрования со смещением, и RSA.
Введение…………………………………………………………………………2
Глава 1. Информационные характеристики дискретных
случайных величин…………………………………………………....4
1.1 Задание………….……………………………………………………………4
1.2 Теория………….…………………………………………………………….4
1.3 Программная реализация и алгоритмы…………………………………….5
1.3.1 Запуск программы, входные и выходные данные………………………..5
1.3.2 Алгоритмы и функции……………………………………………………...5
1.3.3 Тестирование………………………………………………………………..7
Глава 2. Оптимальное кодирование……………………………………………..8
2.1 Задание………………………………………………………………………...8
2.2 Теория…………………………………………………………………………8
2.3 Программная реализация и алгоритмы…………………………………….10
2.3.1 Запуск программы, входные и выходные данные .……………………...10
2.3.2 Алгоритмы и функции…………………………………………………….10
2.3.3 Тестирование………………………………………………………………16
Глава 3. Помехоустойчивое кодирование………………...……………………19
3.1 Задание……………………………………………………………………….19
3.2 Теория………………………………………………………………………...19
3.3 Программная реализация и алгоритмы…………………………………….23
3.3.1 Запуск программы, входные и выходные данные .……………………...23
3.3.2 Алгоритмы и функции…………………………………………………….23
3.3.3 Тестирование………………………………………………………………27
Глава 4. Шифрование данных…….…………………………………………….27
4.1 Задание……………………………………………………………………….27
4.2 Теория………………………………………………………………………...27
4.3 Программная реализация и алгоритмы…………………………………….30
4.3.1 Запуск программы, входные и выходные данные .……………………...30
4.3.2 Алгоритмы и функции…………………………………………………….30
4.3.3 Тестирование………………………………………………………………34
5. Заключение……………………………………………………………………35
Приложение 1……………………………………………………………………36
Приложение 2……………………………………………………………………37
Приложение 3……………………………………………………………………41
Приложение 4……………………………………………………………………43
{
int j=0;
int i;
for(i=0;i<n;i++)
{
STR[i].code=STR[i].code+C[j];
if(STR[i].code>26) STR[i].code=STR[i].code-26;//
for(int e=0;e<26;e++)
if (STR[i].code==ABC[e].code) STR[i].name=ABC[e].name;
j++;
if(j>=nc) j=0;
}
//////////test
puts("Шифрованное сообщение:");
for( i=0;i<n;i++) printf("%c",STR[i].name);
printf("\n");
}
void Deshifrovanie(struct alphabet STR[],int n, int C[],int nc,struct alphabet ABC[])
{
int j=0;
int i;
for(i=0;i<n;i++)
{
STR[i].code=STR[i].code-C[j];
if(STR[i].code<1) STR[i].code=STR[i].code+26;//
for(int e=0;e<26;e++)
if (STR[i].code==ABC[e].code) STR[i].name=ABC[e].name;
j++;
if(j>=nc) j=0;
}
//////////test
puts("\nДешированное сообщение:");
for( i=0;i<n;i++) printf("%c",STR[i].name);
}
////////////
void SimpleCh(int S[])
{
S[0]=2; //2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97
S[1]=3;
S[2]=5;
S[3]=7;
S[4]=11;
S[5]=13;
S[6]=17;
S[7]=19;
S[8]=23;
S[9]=29;
S[10]=31;
S[11]=37;
S[12]=41;
S[13]=43;
S[14]=47;
S[15]=53;
S[16]=59;
S[17]=61;
S[18]=67;
S[19]=71;
S[20]=73;
S[21]=79;
S[22]=83;
S[23]=89;
S[24]=97;
}
void RSA(int M,int C,int C1,int r)
{
int m1; int m2;
m1=M; m2=M;
//printf("\nmes=%d,a=%d,r=%d",
for(int i=0;i<C;i++)
{
M=m1%r;//остаток от деления
m1=M*m2;
//printf("\nM=%d,m1=%d",M,m1);
}
printf("\nШифрованое
//////////////////////////////
m1=M; m2=M;
//printf("\nmes=%d,a=%d,r=%d",
for(int i=0;i<C1;i++)
{
M=m1%r;//остаток от деления
m1=M*m2;
//printf("\nM=%d,m1=%d",M,m1);
}
printf("\n\nДешифрованое
}
int _tmain(int argc, _TCHAR* argv[])
{
struct alphabet ABC[26]; //алфавит
struct alphabet STR[50]; //наша строка символов
int n,i;//n-кол во символов в вводимой строке
int nc;//nc -кол-во символов в ключе
char s[50];
int clue[12];
////////////
int simple[25];int SN=25;//кол-во простых чисел в таблице
int p1;
int r;
int f;
int a; int alp;
int flag=0;
int mess;int messcode;
for(int i=0;i<12;i++) clue[i]=0;
setlocale(LC_CTYPE,"Russian");
ABCFeling(ABC);//заполнение алфавита
printf("Лабораторная работа по ТИиК № 4.\nВыполнил: Гильманов Тимур 4208\n");
///////////////шифрование RSA
SimpleCh(simple);//заполнили массив простых чисел от 2-100
puts("\nВведите значение числа P1 (Р1 должно быть простым числом):");
scanf("%d",&p1);
for(int i=2; i<SN;i++)
{
if(flag==1) break;
r=p1*simple[i];
f=(p1-1)*(simple[i]-1);
for(int j=0;j<SN;j++)
if(flag==1) break;
else
for(int e=0;e<SN;e++)
if((simple[j]*simple[e])%f==1)
{
if(simple[j]!=simple[e])
{
a=simple[j]; alp=simple[e];
printf("\nР2=%d\nr=%d;",
flag=1;
break;
}
}
}
printf("\nЗначение а=%d-Открытый ключ;\nЗначение alpha=%d-Закрытый ключ;",a,alp);
puts("\nВведите сообщение(цифру), которое нужно передать");
scanf("%d",&mess);
messcode=mess;
// messcode=int(pow(mess*1.0,a*1.
RSA(messcode,a,alp,r);
// messcode=int(pow(messcode*1.0,
//////////////////шифрование
puts("\n\nВведите кол
scanf("%d",&n);
puts("Введите желаемую строку:");
scanf("%s",&s);
for( i=0;i<n;i++)
{
switch(s[i])
{
case 'a':STR[i].name='a';STR[i].
case 'b':STR[i].name='b';STR[i].
case 'c':STR[i].name='c';STR[i].
case 'd':STR[i].name='d';STR[i].
};
}
//////////test
//for( i=0;i<n;i++) printf("%c %d\n",STR[i].name,STR[i].code)
puts("Введите длину ключа\n");
scanf("%d",&nc);
GetClue(clue,nc,ABC);//
Shifrovanie(STR,n,clue,nc,ABC)
Deshifrovanie(STR,n,clue,nc,
getch();
return 0;
}
Информация о работе Курсовая работа по «Теории информации и кодирования»