Название: Кодування файлу
Вид работы: лабораторная работа
Рубрика: Информатика и программирование
Размер файла: 22.99 Kb
Скачать файл: referat.me-140213.docx
Краткое описание работы: Реалізація програми, яка буде забезпечувати шифрування і дешифрування будь-яких файлів по довільному алгоритму з використанням пароля. Можливість кодування та розкодування утиліти за простим алгоритмом Гамування, який базується на бітовій операції XOR.
Кодування файлу
Міністерство освіти і науки України
Житомирський державний технологічний університет
Лабораторна робота №3
з курсу "Системне програмування"
на тему: "Кодування файлу"
м. Житомир
2011 р.
Содержание
1. Технічне завдання
2. Вимоги до програми
3. Код програми
Висновок
Список використаної літератури
1. Технічне завдання
Програма повинна забезпечувати шифруванні і дешифруванні будь-яких файлів по довільному алгоритму з використанням пароля.
2. Вимоги до програми
1. Назва програми: Encode.
2. Iнтерфейс - командний рядок, в який вводяться режим роботи програми, пароль, а також імена файлів.
encode </e | /d> <File_to_code> [distination_file] [/p=password] Наприклад: encode /e myfile.txt myfile.cod /p=mypassword, де /e або /d - ключ який визначає шифрування або дешифрування; myfile.txt - специфікація файлу який має бути зашифрований; myfile.cod - специфікація файлу в який має бути записано зашифровану послідовність; /p=mypassword - пароль для шифрування.
3. Режим шифрування - ключ /e, режим дешифрування - ключ /d.
4. При невірному завданні параметрів програма повинна виводити інформацію про вірне завдання параметрів. Наприклад: encode </e | /d> <File_to_code> <distination_file> [/p=password]
5. Зашифрований файл повинен складатися із заголовку і кодованих даних.
6. Заголовок повинен містити: сигнатуру виду файлу;номер версії програми;рядок Copyright, із якого зрозуміло, якою програмою файл був зашифрований; контрольну суму, що повинна використатися в алгоритмі дешифрування; імя вихідного файлу для його відновлення при дешифруванні іншу інформацію на розсуд розробника.
7. Необхідно рахувати контрольну суму, яка буде контролювати правильність дешифрування. Найпростішій метод підрахунку контрольної суми - це сумування всіх байтів файлу.
8. Для виконання кодування даних можна використати будь який алгоритм. Найпростішим може бути алгоритм Гамування (гаммирования).Базується він на бітовій операції XOR.
3. Код програми
програма кодування пароль гамування бітовий
#include <string.h>
#include <io.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>
#include <systypes.h>
#include <sysstat.h>
#include <alloc.h>
#include <errno.h>
#define BUFSIZE 10000
char* buffer;
//структура для збереження заголовку
struct Header
{
char signat[3]; //сiгнатуру виду файлу;
int version; //номер версії програми;
char CopyRight[30]; //рядок Copyright
char filename[13];// імя вихідного файлу
unsigned long CRC; //контрольна сума
}header;
unsigned long Cryptographer(int count, char* pass, unsigned long conf, char* argv);
/***************************************************************************/
void main( int argc, char **argv )
{
int source, target;
int i;
int count;
unsigned long CRCM = 0;
clrscr();
//перевірка кількості аргументів командного рядка
if( argc != 5 )
{
printf( "nUsage:"
"tMYENCODEn"
"t[d:][\path]\oriuginal_filen"
"t[d:][\path]\target_filen"
"tpasswordn"
"tidenteficator( e or d )n" );
getch();
exit( 1 );
}
//відкриваємо вихідний файл
source = open( argv[ 1 ], O_BINARY | O_RDONLY );
//обробка помилки відкриття файлу
if( source == -1 )
{
printf( "nOpen source file error: %d", errno );
getch();
exit( 2 );
}
//створюємо новий файл куди зпишим код
target = open( argv[ 2 ],
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[ 2 ],
O_BINARY | O_WRONLY | O_CREAT | O_TRUNC,
S_IREAD | S_IWRITE );
}
//обробка помилки створеннянового файлу
if( target == -1 )
{
printf( "nOpen target file error: %d", errno );
getch();
exit( 2 );
}
//якщо потрібно декодувати файл,
//то зчитуємо із закодованого файлу заголовок
if( strcmp(argv[4],"/d") == 0)
read(source, &header, sizeof(struct Header));
//якщо потрібно кодувати файл,
//то записуємо заголовок до файлу з кодом
if( strcmp(argv[4], "/e") == 0 )
{
strcpy(header.signat,"AY");
header.version = 1;
strcpy(header.CopyRight,"Uncode");
header.CRC = 0;
strcpy(header.filename,argv[ 1 ]);
write(target, &header,sizeof(struct Header));
}
//виділяємо память для символьного масиву
count = BUFSIZE;
if( ( buffer = ( char* )malloc( count ) ) == NULL )
{
printf( "nNot enough memory" );
getch();
exit( 3 );
}
while( !eof( source ) )
{
//зчитуємо блок символів з вихідного файлу
count = read( source, buffer, count )
if( count == -1 )
{
printf( "nRead file error: %d", errno );
getch();
exit( 4 );
}
//кодуємо зчитані символи
CRCM += Cryptographer(count,argv[3],CRCM,argv[4]);
//записуємо блок закодованих символів до вхідного файлу
count = write( target, buffer, count )
if( count == -1 )
{
printf( "nWrite file error: %d", errno );
getch();
exit( 5 );
}
}
//якщо потрібно кодувати файл,
//то перезаписуємо заголовок файлу з кодом виправляючи контрольну суму
if(strcmp(argv[4],"/e")==0)
{
header.CRC = CRCM;
lseek(target, 0L, 0);
write(target, &header, sizeof(struct Header));
}
//якщо потрібно декодувати файл,
if( strcmp(argv[4],"/d")==0)
//то порівнюємо контрольну суму
if(header.CRC!=CRCM)
printf("Access denied! Password error! Please try again");
//закрити файли та звільнити память
close( source );
close( target );
free( buffer );
getch();
}
/***************************************************************************/
/* Функція приймає:
розмір тексту
пароль
поточну конторльну суму
ключ
Функція повертає:
конторльну суму
*/
unsigned long Cryptographer(int zise, char* password, unsigned long conf, char* key)
{
int Len = strlen( password );
int askikod;
int cur = 0;
for( int a=0; a<zise; a++ )
{
if( cur > Len )
cur = 0;
//якщо варто декодувати
if(strcmp(key,"/d")==0)
{
buffer[a] ^= password[cur];
askikod = buffer[a];
conf += askikod;
}
//якщо варто закодувати
if(strcmp(key,"/e")==0)
{
askikod = buffer[a];
conf += askikod;
buffer[a] ^= password[cur];
}
cur++;
}
return (conf);
}
/***************************************************************************/
Висновок
Отже, на даній лабораторній роботі було реалізовано програму для кодування та декодування файлів. Утиліта забезпечує можливість закодувати та розкодувати файл (закодований цією ж програмою) за простим алгоритмом Гамування.
Програмний код може бути легко змінений з метою заміни алгоритму кодуваннядекодування. Для цього варто лише замінити функцію Cryptographer(), у якій буде реалізовано свій метод обробки даних.
Список використаної літератури
1. Касаткін А.І. Управление ресурсами. - Минск: Вышейшая школа, 1992.
2. Касаткін А.І. Системное программирование. - Минск: Вышейшая школа, 1991.
3. Власенко О.В., Данильченко О.М., Северин О.О. Системне прогрмамування. Курс лекцій. Частина 1. (бібліотека ЖІТІ)
Похожие работы
-
Захист файлів від запису
Призначення програми на мові Асемблера: захист файлів від несанкціонованого копіювання. Існуючі методи для захисту файлів від несанкціонованого доступу. Криптографія, прив'язка до місця розташування на диску, ключова дискета з нестандартним форматом.
-
Програма для перегляду великих текстових файлів, розмір яких більший за 64 кілобайти
Створення програми на мові Асемблера, яка призначена для перегляду в текстовому режимі файлів, розмір яких більший за 64 кілобайти. Основні процедури, з яких вона складеться. Особливості та етапи перегляду великих файлів при невеликому об’ємі пам’яті.
-
Шифрувальник та дешифрувальник
Створення програми в середовищі програмування TURBO PASCAL 7.0, за допомогою якої можливо здійснювати шифровку та розшифровку інформації у файлах з розширенням doc, txt. Програма працює з машинописом англійського тексту, який відповідає стандартам ASCII.
-
Синтез мікропрограмних автоматів
Синтезування мікропрограмного автомата за схемою Уілкса-Стрінжера у вигляді автоматів Мілі та Мура. Основні дані про автомати, їх класифікація. Змістовна схема алгоритму та таблиця кодування операційних та умовних верхівок. Схема операційного автомата.
-
Програмна реалізація криптографічного алгоритму RC5
Дослідження етапів розробки програмної реалізації криптографічного алгоритму RC5. Опис об'єкту, що потребує захисту: операційне середовище, тип програмного забезпечення. Блок-схема алгоритму функціонування програми криптозахисту. Листінг тесту програми.
-
Захищені протоколи
Одна з основних причин успіху віддалених атак на розподілені обчислювальні мережі полягає у використанні мережних протоколів обміну, які не можуть надійно ідентифікувати віддалені об’єкти, захистити з’єднання та дані, що передаються по ньому. Тому цілком природньо, що в процесі функціонування Internet були створені різні захищені мережні протоколи, що використовують криптографію як з закритим, так і з відкритим ключем.
-
Оцінка трудомісткості алгоритму
Засвоєння засобів аналізу трудомісткості обчислювальних алгоритмів. Побудова графа алгоритму з отриманої блок-схеми. Мінімізація графа, його подання у вигляді стохастичної матриці. Знаходження кількості звернень до файлів за допомогою Microsoft Excel.
-
Програми – аналоги DOS-програм ren, xcopy
Написання програми, яка дозволяє перейменувати файл і скопіювати задані файли та каталоги. Використання рекурсивної функції для перегляду дерева підкаталогів при вході в них. Використання системного сервісу файлу, який зосереджено в перериванні 21h.
-
Архівація файлів та створення архіватора текстових файлів
В пам'яті машини (на дискові чи в ОЗУ) данні зберігаються в вигляді послідовності нулів та одиниць. Кожна мінімальна комірка файлу зберігає нуль або одиницю. Спосіб представлення інформації на ПК. Ідея кодування з стисненням. Алгоритм Хаффмана.
-
Контроль доступу до вибраних файлів з веденням протоколу
Ведення протоколу роботи комп’ютера. Розробка програми для створення списку розширень файлів і занесення часу і дати доступу до них на мові програмування Асемблер. Виклик переривання 21h код-функції та занесення до регістрів. Алгоритм та лістинг програми.