Отчет по лабораторной работе по дисциплине " Зашита Информации"



Скачать 48.44 Kb.
Дата25.07.2014
Размер48.44 Kb.
ТипОтчет


Московский государственный институт электроники и математики

(технический университет)


Кафедра ЭВА

Отчет по лабораторной работе

по дисциплине

Зашита Информации”



на тему

Программная реализация шифра Виженера”

Выполнили: Студенты группы с-84

Савельев А. Л.

Проверила: Преподаватель

Сафонова И. Е.



Москва 2008

Содержание

Техническое задание 3

Формальное описание шифра 3

Реализация программы на языке C++ 3

Ccode.cpp 3

Ccode.h 5

coding.cpp 5

Пример кодирования/декодирования 6

Список литературы 6







Техническое задание


Формально описать и реализовать на языке программирования C++ шифр Виженера. Преимуществом этого шифра перед шифром Цезаря является существенное усложнение применения частотного анализа.

Формальное описание шифра


Для любого k, принадлежащего итерации над шифралфавитом (итерация - это ключевое слово), и для любого a(символ назашифрованного текста), принадлежащего алфавиту входных символов(A), существует b, принадлежащее шифралфавиту(B), и существует отображающая функция (f), такие, что b однозначно определяется функцией (f), отображающей на основе символа ключевого слова (k) символ незашифрованного текста(a) в символ зашифрованного текста(b). Одновременно с этим существует функция обратного отображения(f-1), однозначно определяющая преобразование символа зашифрованного текста(b) в символ незашифрованного текста(a). Одновременно с этим алфавит входных символов (A) и шифралфавит (B) совпадают.


Реализация программы на языке C++

Ccode.cpp


#include "CCode.h"

#include

#include

#include


#include
using namespace std;

CCode::CCode(const char* in_f, const char* out_f, const char* keyword)

:str_f_in(in_f), str_f_out_code(out_f), str_keyword(keyword)

{}

void CCode::setInputFile(const char* filename)



{

str_f_in=filename;

}
void CCode::setOutputCodeFile(const char* filename)

{

str_f_out_code=filename;



}
void CCode::setOutputDecodeFile(const char* filename)

{

str_f_out_decode=filename;



}
void CCode::setKeyword(const char* keyword)

{

str_keyword=keyword;



}
bool CCode::code(void)

{

int fd_in, fd_out;



if(!str_f_in.size() || !str_f_out_code.size() || !str_keyword.size() ||

(fd_in=open(str_f_in.c_str(), O_RDONLY))==-1 ||

(fd_out=open(str_f_out_code.

c_str(), O_WRONLY|O_CREAT|O_TRUNC, 0644))==-1)

return false;

size_t sz_read, i;

size_t sz_keyword=str_keyword.size();

while((sz_read=read(fd_in, buf, SZ_READ_BUF))>0)

{

for(i=0;i

buf[i]=getCodeSymbol(buf[i], str_keyword[i%sz_keyword]);

write(fd_out, buf, sz_read);

}

close(fd_in);



close(fd_out);

return true;

}
bool CCode::decode(void)

{

int fd_in_code, fd_out_decode;



if(!str_f_out_code.size() || !str_f_out_decode.size() || !str_keyword.size() ||

(fd_in_code=open(str_f_out_code.c_str(), O_RDONLY))==-1 ||

(fd_out_decode=open(str_f_out_decode.c_str(), O_WRONLY|O_CREAT|O_TRUNC, 0644))==-1)

return false;

size_t sz_read, i;

size_t sz_keyword=str_keyword.size();

while((sz_read=read(fd_in_code, buf, SZ_READ_BUF))>0)

{

for(i=0;i

buf[i]=getDecodeSymbol(buf[i], str_keyword[i%sz_keyword]);

write(fd_out_decode, buf, sz_read);

}

close(fd_in_code);



close(fd_out_decode);

return true;

}
char CCode::getDecodeSymbol(char close_symbol, char symbol_in_keyword)

{

if(close_symbol<32 || close_symbol>126)



return close_symbol;

else


{

int diff=close_symbol-symbol_in_keyword;

if(diff>=0)

return diff+32;

else

return 127+diff;



}

return 0;

}
char CCode::getCodeSymbol(char open_symbol, char symbol_in_keyword)

{

if(open_symbol<32 || open_symbol>126)



return open_symbol;

else


{

size_t ret=(size_t)symbol_in_keyword-32+ (size_t)open_symbol-32;

size_t tmp;

if((tmp=ret%95)>=0)

return 32+tmp;

else


return 32+ret;

}

return 0;



}

Ccode.h


#ifndef CCODE_H

#define CCODE_H

#include

#define SZ_READ_BUF 128


using namespace std;
class CCode

{

public:



CCode(void){};

CCode(const char* in_f, const char* out_f, const char* keyword);

//work with input "in_f" file, output "out_f" file,

// keyword and shift "sh" in alphabet

~CCode(void){};

void setInputFile(const char* filename);

//work with input "filename" file

void setOutputCodeFile(const char* filename);

//work with input "filename" file

void setOutputDecodeFile(const char* filename);

//set output file for decoding

void setKeyword(const char* keyword);

//set keyword

bool code(void);

//coding input file

bool decode(void);

//decoding input file
private:

string str_f_in;

string str_f_out_code;

string str_f_out_decode;

string str_keyword;

char buf[SZ_READ_BUF];//for get file

char getCodeSymbol(char open_symbol, char symbol_in_keyword);

//get code symbol from input text

char getDecodeSymbol(char close_symbol, char symbol_in_keyword);

//get decode symbol from code text

};
#endif

coding.cpp


#include

#include "CCode.h"


using namespace std;
int main(int argc, char *argv[])

{

CCode code("./in_f", "./out_f", "kword");



if(code.code())

cout<<"Codin successful!"<

else

cout<<"Error: Coding failed"<

code.setOutputDecodeFile("./decode_f");

if(code.decode())

cout<<"Decodin successful!"<

else


cout<<"Error: Decoding failed"<return 0;

}

Пример кодирования/декодирования


Незашифрованный файл:

int open(const char *pathname, int flags);

int open(const char *pathname, int flags, mode_t mode);

int creat(const char *pathname, mode_t mode);



Зашифрованный файл:

UfdrT\]^zH[fcgdO`QeduhQgMZY]Xpka^gdRdQZXt3

\S`w_cJZ SbS_loVMMjo|UMlXaFY]{rNZloYQM_c~dYgTXD`w]bIQ!+

NZloVWQYdzH[fcgdO`QeduhQgMZY]Q$o`TP]OgdYgTXm'


Список литературы


  • С. Сингх: “Книга шифров”



Похожие:

Отчет по лабораторной работе по дисциплине \" Зашита Информации\" iconОтчет по лабораторной работе по дисциплине: " Зашита Информации"

Отчет по лабораторной работе по дисциплине \" Зашита Информации\" iconОтчет по лабораторной работе №2 по дисциплине «Цифровая обработка сигналов»
Ознакомиться с теоретическим введением и дополнительными материалами к лабораторной работе
Отчет по лабораторной работе по дисциплине \" Зашита Информации\" iconОтчет по лабораторной работе №15 по дисциплине "Программирование на языке высокого уровня"

Отчет по лабораторной работе по дисциплине \" Зашита Информации\" iconОтчет по лабораторной работе №2 по дисциплине: «Сети ЭВМ и средства телекоммуникаций»

Отчет по лабораторной работе по дисциплине \" Зашита Информации\" iconМетодические указания к лабораторной работе по дисциплине
Операции с таблицами баз данных в среде Delphi: методические указания к лабораторной работе по дисциплине "Информационное обеспечение...
Отчет по лабораторной работе по дисциплине \" Зашита Информации\" iconОтчет по лабораторной работе №1 Исследование полупроводникового диода по дисциплине
Цель: Ознакомление с измерительными приборами лаборатории. Изучение свойств полупроводниковых диодов
Отчет по лабораторной работе по дисциплине \" Зашита Информации\" iconОтчет по лабораторной работе. Отчет по работе включает
Цель работы: изучить тип указатель; получить навыки в организации и обработке однонаправленных списков
Отчет по лабораторной работе по дисциплине \" Зашита Информации\" iconМетодические указания к лабораторной работе по дисциплине «Моделирование систем»
Моделирование простых непрерывных систем с помощью MatLab : Методические указания к лабораторной работе по дисциплине «Моделирование...
Отчет по лабораторной работе по дисциплине \" Зашита Информации\" iconОтчет к лабораторной работе №2 по дисциплине: «Избранные главы по химии элементов»
Цель работы Раствор – это однородная система из двух или более компонентов, состав которой можно изменять в определенных пределах...
Отчет по лабораторной работе по дисциплине \" Зашита Информации\" iconОтчет к лабораторной работе №3 по дисциплине: «Избранные главы по химии элементов»
Цель работы Раствор – это однородная система из двух или более компонентов, состав которой можно изменять в определенных пределах...
Разместите кнопку на своём сайте:
ru.convdocs.org


База данных защищена авторским правом ©ru.convdocs.org 2016
обратиться к администрации
ru.convdocs.org