
Лабораторная работа №3 / Лабораторная 3 Филатов
.docЛипецкий государственный технический университет
Кафедра автоматизированных систем управления
Лабораторная работа №3
по методам и средствам защиты
Реализация криптографической защиты данных
|
Студент |
|
|
|
Филатов А.А. |
|
||||||||
|
|
|
подпись, дата |
|
фамилия, инициалы |
|
||||||||
|
Группа |
|
АС-09-2 |
|
|
|
|
|||||||
|
|
|
|
|
|
|
||||||||
|
Принял |
|
|
|
|
|
||||||||
|
|
|
|
|
Батищев Р.В. |
|
||||||||
|
ученая степень, звание |
|
подпись, дата |
|
фамилия, инициалы |
|
Липецк 2012
1. Задание
Изучить архитектуру криптографических сервисов, встроенных в современные операционные системы, получить практические навыки использования криптографических средств Microsoft .Net Framework при программировании прикладных приложений.
Таблица 1. Вариант алгоритма
№ |
Алгоритм хэширования |
Алгоритм цифровой подписи |
Алгоритм шифрования |
16. |
MD5 |
RSA |
Triple-DES |
-
Краткие теоретические сведения
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”CB9vЯы
out.txt
1234567890qwertyuiop[asdfghjkl;zxcvbnm,./
6. Вывод
В данной лабораторной работы была реализована защита информации с использованием алгоритмов RSA, Triple-DES, md5.