Автор: Пользователь скрыл имя, 12 Марта 2012 в 16:21, лабораторная работа
Криптография (от др.греч κρυπτός — скрытый и γράφω — пишу) — наука о методах обеспечения конфиденциальности (невозможности прочтения информации посторонним). Изначально криптография изучала методы шифрования информации — обратимого преобразования открытого (исходного) текста на основе секретного алгоритма и/или ключа в шифрованный текст (шифротекст). Традиционная криптография образует раздел симметричных криптосистем, в которых зашифрование и расшифрование проводится с использованием одного и того же секретного ключа.
Введение…………………………………………………………………………...3
Описание программы……………………………………………………………..4
Листинг программы…..…………………………………………………………...5
Блок-Схема……………………………………………………...………………..15
Некоммерческое акционерное общество
АЛМАТИНСКИЙ ИНСТИТУТ ЭНЕРГЕТИКИ И СВЯЗИ
Кафедра «Информационных Систем»
Лабораторная работа №1
Тема: «Основные алгоритмы криптографического кодирования»
Дисциплина: «Основны Информационных Систем»
Выполнил студент 2 курса группы
БИС-10-3: Исмагулов Н.Е.
Приняла: доцент Кусен К.Е.
Алматы 2012г.
Содержание
Введение…………………………………………………………
Описание программы………………………………
Листинг программы…..………………………………………………
Блок-Схема……………………………………………………
Введение
Криптография (от др.греч κρυπτός — скрытый и γράφω — пишу) — наука о методах обеспечения конфиденциальности (невозможности прочтения информации посторонним). Изначально криптография изучала методы шифрования информации — обратимого преобразования открытого (исходного) текста на основе секретного алгоритма и/или ключа в шифрованный текст (шифротекст). Традиционная криптография образует раздел симметричных криптосистем, в которых зашифрование и расшифрование проводится с использованием одного и того же секретного ключа. Помимо этого раздела современная криптография включает в себя асимметричные криптосистемы, системы электронной цифровой подписи (ЭЦП), хеш-функции, управление ключами, получение скрытой информации, квантовую криптографию. Криптография не занимается: защитой от обмана, подкупа или шантажа законных абонентов, кражи ключей и других угроз информации, возникающих в защищенных системах передачи данных. Криптография — одна из старейших наук, ее история насчитывает несколько тысяч лет.
Описание программы
Данная программа работает с файлами формата .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 << "_____________________________
}
return 0;
}
Блок-Схема
Зашифровать
Да Нет
Да Нет
Информация о работе Основные алгоритмы криптографического кодирования