Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
9
Добавлен:
19.02.2016
Размер:
41.98 Кб
Скачать

Міністерство освіти, науки, молоді та спорту України

Житомирський державний технологічний університет

ФІКТ

Кафедра ПЗОТ

Група ПІК-9

Лабораторна робота №2

Кодування файлу

Виконав : Оленюк О.О.

Перевірив : Власенко О.В.

Житомир

2012

Завдання:

Програма повинна забезпечувати шифрування і дешифрування будь- яких файлів по довільному алгоритму з використанням пароля.

Виконання роботи

1. Текст програми.

#include <io.h>

#include <conio.h>

#include <stdio.h>

#include <stdlib.h>

#include <fcntl.h>

#include <sys\types.h>

#include <sys\stat.h>

#include <alloc.h> \\ Підключення бібліотек

#include <errno.h>

#include <string.h>

#define BUFSIZE 10000 \\ Оголошення константи

void main( int argc, char **argv ) { \\ Доступ до командної строчки

int source, target;

int i,j ;

int Suma ;

char *buffer, *parol;

int count;

unsigned int buf;

struct Zagolovok \\ Оголошення функції заголовка

{ char program[10];

char versia[14];

unsigned long summa;

char namefile[10]; } zagol;

buf = sizeof(struct Zagolovok);

if( argc != 5 ) {

printf( "\n" "Usage: ENCODE [/e or /d] [Input_File] [Output_File] [Password] \n" );

exit( 1 );

}

if( strcmp(argv[1], "/e") != 0 && strcmp(argv[1], "/d") != 0) \\ Перевірка

exit( 3 ); \\ правильності введення ключа

if( ( source = open( argv[ 2 ], O_BINARY | O_RDONLY ) ) == -1 ) {

printf( "\nOpen source file error: %d", errno ); \\ Відкриття файлу

exit( 1 );

}

target = open( argv[3], O_BINARY | O_WRONLY | O_CREAT | O_EXCL,

S_IREAD | S_IWRITE ); \\ Створення файлу

if( errno == EEXIST ) {

printf( "\nFile already exists. Overwrite? (Y/N)\n" );

i = getch();

if( ( i == 'y' ) || ( i == 'Y' ) )

target = open( argv[ 3 ], O_BINARY | O_WRONLY | O_CREAT | O_TRUNC,

S_IREAD | S_IWRITE );

}

if( target == -1 ) {

printf( "\nOpen target file error: %d", errno );

exit( 2 );

}

count = BUFSIZE;

if( ( buffer = ( char* )malloc( count ) ) == NULL ) {

printf( "\nNot enough memory" ); \\ Перевірка наявності вільної пам’яті

exit( 3 );

}

if( strcmp(argv[1], "/e") == 0)

write(target, &zagol, buf); \\ Запис структури Заголовок при шифруванні

if( strcmp(argv[1], "/d") == 0)

read(source, &zagol, buf); \\ Читання структури Заголовок при дешифруванні

while( !eof( source ) ) {

if( ( count = read( source, buffer, count ) ) == -1 ) {

printf( "\nRead file error: %d", errno );

exit( 4 ); }

j=0; \\ Виконання бітової операції XOR

for( i = 0; i < count; i++ ) {

if( j == strlen(parol)) j=0 ;

buffer[ i ] ^= parol[ j++ ];

}

if( ( count = write( target, buffer, count ) ) == -1 ) { \\ Запис в файл

printf( "\nWrite file error: %d", errno );

exit( 5 );

}

}

if( strcmp(argv[1], "/e") == 0) \\ Запис вмісту Заголовок при шифруванні

{

strcpy(zagol.program, "-=Encode=-");

strcpy(zagol.versia, "/Professional/");

zagol.summa = Suma;

strcpy(zagol.namefile,argv[2]) ;

lseek(target, 0L, SEEK_SET);

write(target, &zagol, buf);

}

if( strcmp(argv[1], "/d") == 0) \\Перевірка вмісту Заголовок при дешифруванні

if(zagol.summa != Suma || strcmp(zagol.program, "Encode") != 0 || strcmp(zagol.versia, "Professional") != 0)

printf("\n Error, do not true code! \n");

close( source );

close( target );

free( buffer );

}

Соседние файлы в папке СПЗ отчеты (Власенко О.В.)