Основные алгоритмы криптографического кодирования

Автор: Пользователь скрыл имя, 12 Марта 2012 в 16:21, лабораторная работа

Краткое описание

Криптография (от др.греч κρυπτός — скрытый и γράφω — пишу) — наука о методах обеспечения конфиденциальности (невозможности прочтения информации посторонним). Изначально криптография изучала методы шифрования информации — обратимого преобразования открытого (исходного) текста на основе секретного алгоритма и/или ключа в шифрованный текст (шифротекст). Традиционная криптография образует раздел симметричных криптосистем, в которых зашифрование и расшифрование проводится с использованием одного и того же секретного ключа.

Оглавление

Введение…………………………………………………………………………...3
Описание программы……………………………………………………………..4
Листинг программы…..…………………………………………………………...5
Блок-Схема……………………………………………………...………………..15

Файлы: 1 файл

Лабараторная работа №1.docx

— 30.42 Кб (Скачать)

Некоммерческое акционерное  общество

АЛМАТИНСКИЙ ИНСТИТУТ ЭНЕРГЕТИКИ И СВЯЗИ 

 

 

 

 

 

Кафедра «Информационных  Систем» 

 

 

 

 

 

 

 

 

Лабораторная работа №1

Тема: «Основные алгоритмы  криптографического кодирования»

Дисциплина: «Основны Информационных Систем»

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Выполнил студент 2 курса группы

БИС-10-3: Исмагулов Н.Е.

Приняла: доцент Кусен К.Е.

 

 

 

 

 

 

 

Алматы 2012г.

Содержание

Введение…………………………………………………………………………...3

Описание программы……………………………………………………………..4

Листинг программы…..…………………………………………………………...5

Блок-Схема……………………………………………………...………………..15

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Введение

Криптография (от др.греч κρυπτός — скрытый и γράφω — пишу) — наука о методах обеспечения конфиденциальности  (невозможности прочтения информации посторонним). Изначально криптография изучала методы шифрования информации — обратимого преобразования открытого (исходного) текста на основе секретного алгоритма и/или ключа в шифрованный текст (шифротекст). Традиционная криптография образует раздел симметричных криптосистем, в которых зашифрование и расшифрование проводится с использованием одного и того же секретного ключа. Помимо этого раздела современная криптография включает в себя асимметричные криптосистемы, системы электронной цифровой подписи (ЭЦП), хеш-функции, управление ключами, получение скрытой информации, квантовую криптографию. Криптография не занимается: защитой от обмана, подкупа или шантажа законных абонентов, кражи ключей и других угроз информации, возникающих в защищенных системах передачи данных. Криптография — одна из старейших наук, ее история насчитывает несколько тысяч лет.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Описание программы

Данная программа работает с  файлами формата .txt считывая текст вписанный внутри файла .txt и кодирует данный текст, так же возможна декодировка закодированного файла. Для кодировки файла используется шифр Цезаря. Шифр Цезаря, также известный как шифр сдвига, код Цезаря или сдвиг Цезаря — один из самых простых и наиболее широко известных методов шифрования. Шифр Цезаря — это вид шифра подстановки, в котором каждый символ в открытом тексте заменяется буквой находящейся на некоторое постоянное число позиций левее или правее него в алфавите. В данной программе создано три вида кодировки по шифру Цезаря, первый(простой)-сдвиг на 1 букву, второй(средний)- сдвиг на 2 буквы, третий(сложный).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Листинг программы

 

#include <stdio.h>

#include <tchar.h>

#include <iostream>

using namespace std;

const int n = 256;

// Индексируем используемые  символы и буквы

int getIndexChar(char a)

{

int index = 0;

switch(a)

{

case 'z': index = 1; break;

case 'y': index = 2; break;

case 'x': index = 3; break;

case 'w': index = 4; break;

case 'v': index = 5; break;

case 'u': index = 6; break;

case 't': index = 7; break;

case 's': index = 8; break;

case 'r': index = 9; break;

case 'q': index = 10; break;

case 'p': index = 11; break;

case 'o': index = 12; break;

case 'n': index = 13; break;

case 'm': index = 14; break;

case 'l': index = 15; break;

case 'k': index = 16; break;

case 'j': index = 17; break;

case 'i': index = 18; break;

case 'h': index = 19; break;

case 'g': index = 20; break;

case 'f': index = 21; break;

case 'e': index = 22; break;

case 'd': index = 23; break;

case 'c': index = 24; break;

case 'b': index = 25; break;

case 'a': index = 26; break;

case 'Z': index = 27; break;

case 'Y': index = 28; break;

case 'X': index = 29; break;

case 'W': index = 30; break;

case 'V': index = 31; break;

case 'U': index = 32; break;

case 'T': index = 33; break;

case 'S': index = 34; break;

case 'R': index = 35; break;

case 'Q': index = 36; break;

case 'P': index = 37; break;

case 'O': index = 38; break;

case 'N': index = 39; break;

case 'M': index = 40; break;

case 'L': index = 41; break;

case 'K': index = 42; break;

case 'J': index = 43; break;

case 'I': index = 44; break;

case 'H': index = 45; break;

case 'G': index = 46; break;

case 'F': index = 47; break;

case 'E': index = 48; break;

case 'D': index = 49; break;

case 'C': index = 50; break;

case 'B': index = 51; break;

case 'A': index = 52; break;

          case 'а': index = 53; break;

case 'б': index = 54; break;

case 'в': index = 55; break;

case 'г': index = 56; break;

case 'д': index = 57; break;

case 'е': index = 58; break;

case 'ё': index = 59; break;

case 'ж': index = 60; break;

case 'з': index = 61; break;

case 'и': index = 62; break;

case 'й': index = 63; break;

case 'к': index = 64; break;

case 'л': index = 65; break;

case 'м': index = 66; break;

case 'н': index = 67; break;

case 'о': index = 68; break;

case 'п': index = 69; break;

case 'р': index = 70; break;

case 'с': index = 71; break;

case 'т': index = 72; break;

case 'у': index = 73; break;

case 'ф': index = 74; break;

case 'х': index = 75; break;

case 'ц': index = 76; break;

case 'ч': index = 77; break;

case 'ш': index = 78; break;

case 'щ': index = 79; break;

case 'ъ': index = 80; break;

case 'ы': index = 81; break;

case 'ь': index = 82; break;

case 'э': index = 83; break;

case 'ю': index = 84; break;

   case 'я': index = 85; break;

case 'А': index = 86; break;

case 'Б': index = 87; break;

case 'В': index = 88; break;

case 'Г': index = 89; break;

case 'Д': index = 90; break;

case 'Е': index = 91; break;

case 'Ё': index = 92; break;

case 'Ж': index = 93; break;

case 'З': index = 94; break;

case 'И': index = 95; break;

case 'Й': index = 96; break;

case 'К': index = 97; break;

case 'Л': index = 98; break;

case 'М': index = 99; break;

case 'Н': index = 100; break;

case 'О': index = 101; break;

case 'П': index = 102; break;

case 'Р': index = 103; break;

case 'С': index = 104; break;

case 'Т': index = 105; break;

case 'У': index = 106; break;

case 'Ф': index = 107; break;

case 'Х': index = 108; break;

case 'Ц': index = 109; break;

case 'Ч': index = 110; break;

case 'Ш': index = 111; break;

case 'Щ': index = 112; break;

case 'Ъ': index = 113; break;

case 'Ы': index = 114; break;

case 'Ь': index = 115; break;

          case 'Э': index = 116; break;

          case 'Ю': index = 117; break;

          case 'Я': index = 118; break;

// 

case '0': index = 119; break;

case '1': index = 120; break;

case '2': index = 121; break;

case '3': index = 122; break;

case '4': index = 123; break;

case '5': index = 124; break;

case '6': index = 125; break;

case '7': index = 126; break;

case '8': index = 127; break;

case '9': index = 128; break;

case ' ': index = 129; break;

//    

case '!': index = 151; break;

case '?': index = 152; break;

case '.': index = 153; break;

case ',': index = 154; break;

case ':': index = 155; break;

case ';': index = 156; break;

case '(': index = 157; break;

case ')': index = 158; break;

case '-': index = 159; break;

case '/': index = 160; break;

case '"': index = 161; break;

default : index = 0;

}

return index;

}

 

// Конвертируем символы  и буквы в числа

char setChar(int index)

{

char a;

switch(index)

{

case 1: a = 'z'; break;

case 2: a = 'y'; break;

case 3: a = 'x'; break;

case 4: a = 'w'; break;

case 5: a = 'v'; break;

case 6: a = 'u'; break;

case 7: a = 't'; break;

case 8: a = 's'; break;

case 9: a = 'r'; break;

case 10: a = 'q'; break;

case 11: a = 'p'; break;

case 12: a = 'o'; break;

case 13: a = 'n'; break;

case 14: a = 'm'; break;

case 15: a = 'l'; break;

case 16: a = 'k'; break;

case 17: a = 'j'; break;

case 18: a = 'i'; break;

case 19: a = 'h'; break;

case 20: a = 'g'; break;

case 21: a = 'f'; break;

case 22: a = 'e'; break;

case 23: a = 'd'; break;

case 24: a = 'c'; break;

case 25: a = 'b'; break;

case 26: a = 'a'; break;

case 27: a = 'Z'; break;

case 28: a = 'Y'; break;

case 29: a = 'X'; break;

case 30: a = 'W'; break;

case 31: a = 'V'; break;

case 32: a = 'U'; break;

case 33: a = 'T'; break;

case 34: a = 'S'; break;

case 35: a = 'R'; break;

case 36: a = 'Q'; break;

case 37: a = 'P'; break;

case 38: a = 'O'; break;

case 39: a = 'N'; break;

case 40: a = 'M'; break;

case 41: a = 'L'; break;

case 42: a = 'K'; break;

case 43: a = 'J'; break;

case 44: a = 'I'; break;

case 45: a = 'H'; break;

case 46: a = 'G'; break;

case 47: a = 'F'; break;

case 48: a = 'E'; break;

case 49: a = 'D'; break;

case 50: a = 'C'; break;

case 51: a = 'B'; break;

case 52: a = 'A'; break;

//

  case 53: a = 'а'; break;

case 54: a = 'б'; break;

case 55: a = 'в'; break;

case 56: a = 'г'; break;

case 57: a = 'д'; break;

case 58: a = 'е'; break;

case 59: a = '¸ё; break;

case 60: a = 'ж'; break;

case 61: a = 'з’; break;

case 62: a = 'и'; break;

case 63: a = 'й'; break;

case 64: a = 'к'; break;

case 65: a = 'л'; break;

case 66: a = 'м'; break;

case 67: a = 'н'; break;

case 68: a = 'о'; break;

case 69: a = 'п'; break;

case 70: a = 'р'; break;

case 71: a = 'с'; break;

case 72: a = 'т'; break;

case 73: a = 'у'; break;

case 74: a = 'ф'; break;

case 75: a = 'х'; break;

case 76: a = 'ц'; break;

case 77: a = 'ч'; break;

case 78: a = 'ш'; break;

case 79: a = 'щ'; break;

case 80: a = 'ъ'; break;

case 81: a = 'ы'; break;

case 82: a = 'ь'; break;

case 83: a = 'э'; break;

case 84: a = 'ю'; break;

  case 85: a = 'я'; break;

    case 86: a = 'А'; break;

case 87: a = 'Б'; break;

case 88: a = 'В'; break;

case 89: a = 'Г'; break;

case 90: a = 'Д'; break;

case 91: a = 'Е'; break;

case 92: a = 'Ё'; break;

case 93: a = 'Ж'; break;

case 94: a = 'З'; break;

case 95: a = 'И'; break;

case 96: a = 'Й'; break;

case 97: a = 'К'; break;

case 98: a = 'Л'; break;

case 99: a = 'М'; break;

case 100: a = 'Н'; break;

case 101: a = 'О'; break;

case 102: a = 'П'; break;

case 103: a = 'Р'; break;

case 104: a = 'С'; break;

case 105: a = 'Т'; break;

case 106: a = 'У'; break;

case 107: a = 'Ф'; break;

case 108: a = 'Х'; break;

case 109: a = 'Ц'; break;

case 110: a = 'Ч'; break;

case 111: a = 'Ш'; break;

case 112: a = 'Щ'; break;

case 113: a = 'Ъ'; break;

case 114: a = 'Ы'; break;

case 115: a = 'Ь'; break;

case 116: a = 'Э'; break;

case 117: a = 'Ю'; break;

   case 118: a = 'Я'; break;

  //

   case 119: a = '0'; break;

   case 120: a = '1'; break;

   case 121: a = '2'; break;

   case 122: a = '3'; break;

   case 123: a = '4'; break;

   case 124: a = '5'; break;

   case 125: a = '6'; break;

   case 126: a = '7'; break;

   case 127: a = '8'; break;

   case 128: a = '9'; break;

   case 129: a = ' '; break;

//

case 151: a = '!'; break;

case 152: a = '?'; break;

case 153: a = '.'; break;

case 154: a = ','; break;

case 155: a = ':'; break;

case 156: a = ';'; break;

case 157: a = '('; break;

case 158: a = ')'; break;

case 159: a = '-'; break;

case 160: a = '/'; break;

case 161: a = '"'; break;

case 162: a = '    '; break;

default : a = '_';

}

return a;

}

 

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

void Encoder(int cipher, int*mas, int size)

{

for(int i = 0; i<size; i++)

{

if(mas[i] < 150)

{

mas[i] += cipher;

if(mas[i] > 129)

mas[i] -= 129;

}

}

}

 

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

void Decoder(int cipher, int*mas, int size)

{

for(int i = 0; i<size; i++)

{

if(mas[i] < 151)

{

mas[i] -= cipher;

if(mas[i] < 1)

mas[i] += 129;

}

}

}

 

//main function

int _tmain(int argc, _TCHAR* argv[])

{

    setlocale (LC_CTYPE, "Russian");

short end, choose;

char inputstr[n] = "";

int index_char[n];

int cipher;

 

FILE* file(NULL);

    char fname[15] = "";

 

while(true)

{

choose = 0;

cipher = 0;

strcpy(inputstr, "");

for(int i = 0; i<n; i++)

index_char[i] = 0;

 

cout << "Выберите действие (1 - зашифровать, 2 - расшифровать): ";

cin >> choose;

if(choose==1 || choose==2)

{

cout << endl << endl << "Укажите путь к используемому файлу: ";

cin >> fname;

    if ((file = fopen(fname,"r")) == 0)

{

cout << "Ошибка при открытии файла!" << endl;

}

else{

cout << "Файл найден. Содержание файла:" << endl << endl;

fgets(inputstr, n, file);

fclose(file);

cout << inputstr << endl;

 

cout << endl << "Укажите уровень сложности шифрования:" << endl;

cout << "1. Простой" << endl;

cout << "2. Средний" << endl;

cout << "3. Сложный " << endl;

cin >> cipher;

 

if(cipher < 4 && cipher > 0)

{

for(int i = 0; i<strlen(inputstr)-1; i++)

{

index_char[i] = getIndexChar(inputstr[i]);

}

 

if(choose == 1)

{

Encoder(cipher, index_char, strlen(inputstr));

cout << endl ;

for(int i = 0; i<strlen(inputstr)-1; i++)

{

inputstr[i] = setChar(index_char[i]);

}

 

cout << "Зашифрованный текст сохранен в Encoded.txt" << endl << inputstr;

file = fopen("Encoded.txt","w");

fprintf(file, inputstr);

fclose(file);

}

else

{

Decoder(cipher, index_char, strlen(inputstr));

for(int i = 0; i<strlen(inputstr)-1; i++)

{

inputstr[i] = setChar(index_char[i]);

}

cout << "Расшифрованный текст сохранен в Decoded.txt" << endl << inputstr;

file = fopen("Decoded.txt","w");

fprintf(file, inputstr);

fclose(file);

}

}

else cout << " Ошибка, неприемлемое значение " << endl;

}

}

else cout << "Ошибка, неприемлемое значение" << endl;

cout << endl << endl << "Желаете продолжить работу с программой? (1 - Да, 0 - Нет) ";

cin >> end;

if(end == 0)

break;

else cout <<endl << "___________________________________________________"<< endl;

}

return 0;

}

 

 

 

 

 

Блок-Схема 


 

 

 

 

 

 

 

 

 

 

 

                      Зашифровать                                 Расшифровать  

 

 

 

 

 

 

                            Да  Нет

 

 

 

 

 

 

 

 

Да Нет

 


Информация о работе Основные алгоритмы криптографического кодирования