Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа №3 / Лабораторная 3 Филатов

.doc
Скачиваний:
28
Добавлен:
20.06.2014
Размер:
111.62 Кб
Скачать

Липецкий государственный технический университет

Кафедра автоматизированных систем управления

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

по методам и средствам защиты

Реализация криптографической защиты данных

Студент

Филатов А.А.

подпись, дата

фамилия, инициалы

Группа

АС-09-2

Принял

Батищев Р.В.

ученая степень, звание

подпись, дата

фамилия, инициалы

Липецк 2012

1. Задание

Изучить архитектуру криптографических сервисов, встроенных в современные операционные системы, получить практические навыки использования криптографических средств Microsoft .Net Framework при программировании прикладных приложений.

Таблица 1. Вариант алгоритма

Алгоритм хэширования

Алгоритм цифровой подписи

Алгоритм шифрования

16.

MD5

RSA

Triple-DES

  1. Краткие теоретические сведения

Triple DES (3DES) — симметричный блочный шифр, созданный Уитфилдом ДиффиМартином Хеллманом и Уолтом Тачманном в 1978 году на основе алгоритма DES, с целью устранения главного недостатка последнего — малой длины ключа (56 бит), который может быть взломан методом полного перебора ключа. Скорость работы 3DES в 3 раза ниже, чем у DES, но криптостойкость намного выше — время, требуемое для криптоанализа 3DES, может быть в миллиард раз больше, чем время, нужное для вскрытия DES. 3DES используется чаще, чем DES, который легко ломается при помощи сегодняшних технологий (в1998 году организация Electronic Frontier Foundation, используя специальный компьютер DES Cracker, вскрыла DES за 3 дня). 3DES является простым способом устранения недостатков DES. Алгоритм 3DES построен на основе DES, поэтому для его реализации возможно использовать программы, созданные для DES.

3. Текст программы

#include "heap.h"

#include <ctime>

#include <string>

using namespace std;

int main()

{

int t=1;

srand(1);

while(t!=0)

{

cout << endl << "What to do? Encode(1), Decode(2), Exit(0): ";

cin >> t;

switch(t)

{

case 1:

{

long int e,d,n;

int size = 0, dop=0;

double m;

string infile, pbkey, outfile, keyTDES;

char en_md5[33], *text, *en_str, *en_text, _md5[33];

FILE * pFile;

//Генерация ключей

genKeys(&e, &d, &n);

cout << e << " " << d << " " << n << endl;

//входной файл

cout << "Input file path: ";

cin >> infile;

pFile = fopen(infile.c_str(), "rb");

if(!pFile) { cout << "Cant open file!" << endl; break;}

//число символов в файле

fseek (pFile, 0, SEEK_END);

size = ftell(pFile);

rewind(pFile);

text = new char[size+1];

dop=8-((size+32)%8);

en_str = new char[size+32+dop];

en_text = new char[size+32+dop];

//обнуление строк

makeNull(text,size+1);

makeNull(en_str,size+32+dop);

//чтение

fread(text,sizeof(char),size,pFile);

text[size] = '\0';

//cout << text << endl;

fclose(pFile);

//хэш, кодирование хэша

//cout << md5(text) << endl;

encodeRSA(md5(text).c_str(), 32, en_md5, e, n);

en_md5[32]='\0';

//cout << en_md5 << endl;

//прикрепление хэша из 32 символов в начало файла

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

{

en_str[i] = (i<32)? en_md5[i]: text[i-32];

}

en_str[size+32]='\0';

//cout << en_str << endl;

cout << "Input key to encrypt: ";

cin >> keyTDES;

//tdes шифрование данных

encodeTDES(en_str, size+32, (char*)keyTDES.c_str(), en_text);

//cout << en_text << endl;

//сохранение в файл

//выходной файл

cout << "Output file path: ";

cin >> outfile;

pFile = fopen(outfile.c_str(), "ab");

if(!pFile) { cout << "Cant open file!" << endl; break;}

fwrite(en_text,sizeof(char),size+32+dop,pFile);

fclose(pFile);

break;

}

case 2:

{

long int e,d,n;

int t=1, size = 0, dop=0;

double m;

string infile, pbkey, outfile, keyTDES;

char en_md5[33], *text, *en_str, *en_text, _md5[33];

FILE * pFile;

//входной файл

cout << "Input file path: ";

cin >> infile;

pFile = fopen(infile.c_str(), "rb");

if(!pFile) { cout << "Cant open file!" << endl; break;}

//число символов в файле

fseek (pFile, 0, SEEK_END);

size = ftell(pFile);

rewind(pFile);

text = new char[size-32];

en_str = new char[size];

en_text = new char[size];

//обнуление строк

makeNull(text,size+1);

makeNull(en_str,size-32);

//чтение

fread(en_text,sizeof(char),size,pFile);

//cout << en_text << endl;

fclose(pFile);

cout << "Input key to decrypt: ";

cin >> keyTDES;

//tdes дешифрование данных

decodeTDES(en_text, size, (char*)keyTDES.c_str(), en_str);

//cout << en_str << endl;

//открепление хэша из 32 символов в начало файла

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

en_md5[i] = en_str[i];

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

text[i-32] = en_str[i];

//cout << text << endl;

//cout << en_md5 << endl;

cout << "Input public key (d n): ";

cin >> d;

cin >> n;

//хэш, декодирование хэша

//cout << en_md5 << endl;

decodeRSA(en_md5, 32, _md5, d, n);

en_md5[32]='\0';

//cout << _md5 << endl;

//cout << md5(text) << endl;

cout << "Signature is ok!" << endl;

//сохранение в файл

//выходной файл

cout << "Output file path: ";

cin >> outfile;

pFile = fopen(outfile.c_str(), "ab");

if(!pFile) { cout << "Cant open file!" << endl; break;}

fwrite(text,sizeof(char),size-32,pFile);

fclose(pFile);

break;

}

default:

break;

}

}

exit(1);

}

5. Тестовый пример

in.txt

1234567890qwertyuiop[asdfghjkl;zxcvbnm,./

enc.txt

Ьп¤—ђ˜њз‹ґс//-9U,і(™E0”C˜B9vЯы

out.txt

1234567890qwertyuiop[asdfghjkl;zxcvbnm,./

6. Вывод

В данной лабораторной работы была реализована защита информации с использованием алгоритмов RSA, Triple-DES, md5.

8

Соседние файлы в папке Лабораторная работа №3