Вы находитесь на странице: 1из 10

МИНОБРНАУКИ РОССИИ

Федеральное государственное бюджетное образовательное


учреждение высшего образования
«Тульский государственный университет»

КАФЕДРА ИНФОРМАЦИОННОЙ БЕЗОПАСНОСТИ

ПРОГРАММНО-АППАРАТНЫЕ СРЕДСТВА ОБЕСПЕЧЕНИЯ


ИНФОРМАЦИОННОЙ БЕЗОПАСНОСТИ

Лабораторная работа № 3
Методы и средства хранения информации

Выполнили: ст. группы 230711


Акользина И. С.
Кузнецова А. В.
Кузьминова С. С.
Проверил:
Абрамов Д. А.
______________

Тула 2015
1. Цель работы
Изучить варианты хранения конфиденциальной информации в
защищенных контейнерах.

2. Задание на работу
Вариант № 3. Защищенный диск с полным сохранением файловой
структуры и средствами дефрагментации.

3. Теоретическая справка
Дефрагментация диска
Дефрагментация диска – это процесс объединения фрагментированных
файлов на жестком диске компьютера. Файлы на жестком диске со временем
фрагментируются – при сохранении, внесении в них изменений или
удалении. Внесенные в файл изменения при этом сохраняются в другие
секторы жесткого диска, удаленные от местоположения исходного файла. Со
временем фрагментация затрагивает не только файл, но и весь жесткий диск.
Это замедляет работу компьютера, т.к. для открытия файла приходится
считывать информацию в разных местах жесткого диска.
Большая степень фрагментации файлов заставляет жесткий диск
совершать дополнительные действия, что замедляет работу компьютера.
Программа дефрагментации диска производит упорядочение
фрагментированных файлов для более эффективной работы. В Windows
имеется встроенная утилита «Дефрагментация диска»: Windows XP –
\WINDOWS\system32\dfrg.msc; Windows Vista –
\Windows\System32\dfrgui.exe. Для дефрагментации диска можно применять
и утилиты сторонних разработчиков. Программа дефрагментации диска
может работать автоматически (по заданному расписанию), но можно
запускать дефрагментацию и вручную.

2
4. Ход работы
При запуске программы на экран выводится меню: «1 – Создание
архива. 2 – Извлечение из архива».
Алгоритм работы программы при выборе «1 – Создание архива»:
1) Архивирование заданной директории.
2) Шифрование созданного архива путём выполнения побайтовой операции
“исключающее или” между байтами исходного архива и введенного ключа.
3) Подсчёт контрольной суммы зашифрованного архива по алгоритму: сумма
по модулю 216 всех пар байт зашифрованного архива.
Алгоритм работы программы при выборе «2 – Извлечение из архива»:
1) Подсчёт контрольной суммы зашифрованного архива по алгоритму: сумма
по модулю 216 всех пар байт зашифрованного архива.
2) Если полученное значение контрольной суммы совпадает со значением
контрольной суммы, записанным в файл hash.txt, то:
3) Выполняется расшифрование архива путём выполнения побайтовой
операции “исключающее или” между байтами зашифрованного архива и
введенного ключа;
4) Выполняется извлечение информации из архива.
5) Иначе выводится сообщение об ошибке.

Программа
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using ICSharpCode.SharpZipLib.Zip;
using ICSharpCode.SharpZipLib.Checksums;

namespace ConsoleApplication2
{
class Program
{
static void Add() //Добавление в архив
{
//Создание архива
string ArchiveName; //Путь к архиву
string CatalogueName; //Путь к каталогу

bool success = true;


3
try
{
Console.WriteLine("Введите путь к каталогу");
CatalogueName = string.Empty;
CatalogueName = Console.ReadLine();

Console.WriteLine("Введите путь к архиву");


ArchiveName = string.Empty;
ArchiveName = Console.ReadLine();

FastZip zip = new FastZip();


zip.CreateZip(ArchiveName, CatalogueName, true, null);

//Шифрование архива
string Key; //Ключ шифрования
Console.WriteLine("Введите ключ");
Key = string.Empty;
Key = Console.ReadLine();
long LenKey = Key.Length;
byte[] KeyBytes = new byte[Key.Length * sizeof(char)];
System.Buffer.BlockCopy(Key.ToCharArray(), 0, KeyBytes, 0,
KeyBytes.Length);

FileStream inp = File.Open(ArchiveName, FileMode.Open);


long len = inp.Length;
byte[] mass = new byte[len];
for (long i = 0; i < len; i++)
{
mass[i] = (byte)inp.ReadByte();
}
inp.Close();

long j = 0;
for (long i = 0; i < len; i++)
{
if (j == LenKey) j = 0;
mass[i] = (byte)(mass[i] ^ KeyBytes[j]);
j++;
}

FileInfo file = new FileInfo(ArchiveName);


if (file.Exists == true)
{
file.Delete();
}

FileStream outp = File.Open(ArchiveName, FileMode.Create);


for (long i = 0; i < len; i++)
{
outp.WriteByte(mass[i]);
}
outp.Close();

//Формирование контрольной суммы


int summ = 0; //Значение контрольной суммы

for (long i = 0; i < len; i = i + 2)


{
if ((len % 2 != 0) && (i == len - 1))
{
int summ0 = (mass[i] << 8) | (byte)(0);
summ = (summ + summ0) % 65536;
}

4
else
{
int summ0 = (mass[i] << 8) | mass[i + 1];
summ = (summ + summ0) % 65536;
}

if ((i == len - 2) || (i == len - 1))


{
StreamWriter outp1 = new StreamWriter("hash.txt");
outp1.WriteLine(summ);
outp1.Close();
}
}
}
catch (Exception exc)
{
success = false;
Console.WriteLine("Произошла ошибка");
Console.WriteLine("{0}", exc);
Console.ReadLine();
}

if (success == true)
{
Console.WriteLine("Архивирование прошло успешно");
Console.ReadLine();
}
}

static void Extract() //Извлечение из архива


{
string ArchiveName; //Путь к архиву
string CatalogueName; //Путь к каталогу

bool success = true;

try
{
Console.WriteLine("Введите путь к архиву");
ArchiveName = string.Empty;
ArchiveName = Console.ReadLine();

Console.WriteLine("Введите путь к каталогу");


CatalogueName = string.Empty;
CatalogueName = Console.ReadLine();

FileStream inp = File.Open(ArchiveName, FileMode.Open);


long len = inp.Length;
byte[] mass = new byte[len];
for (long i = 0; i < len; i++)
{
mass[i] = (byte)inp.ReadByte();
}
inp.Close();

//Сравнение контрольной суммы


int summ = 0;

for (long i = 0; i < len; i = i + 2)


{
if ((len % 2 != 0) && (i == len - 1))
{
int summ0 = (mass[i] << 8) | (byte)(0);
summ = (summ + summ0) % 65536;

5
}
else
{
int summ0 = (mass[i] << 8) | mass[i + 1];
summ = (summ + summ0) % 65536;
}
}

StreamReader inp1 = new StreamReader("hash.txt");


int summ1 = Convert.ToInt32(inp1.ReadLine());
if (summ1 == summ) //Если полученное значение контрольной суммы совпадает
со значением контрольной суммы, записанным в файле
{
//Расшифрование архива
string Key; //Ключ шифрования
Console.WriteLine("Введите ключ");
Key = string.Empty;
Key = Console.ReadLine();
long LenKey = Key.Length;
byte[] KeyBytes = new byte[Key.Length * sizeof(char)];
System.Buffer.BlockCopy(Key.ToCharArray(), 0, KeyBytes, 0,
KeyBytes.Length);

long j = 0;
for (long i = 0; i < len; i++)
{
if (j == LenKey) j = 0;
mass[i] = (byte)(mass[i] ^ KeyBytes[j]);
j++;
}

FileInfo file = new FileInfo(ArchiveName);


if (file.Exists == true)
{
file.Delete();
}

FileStream outp = File.Open(ArchiveName, FileMode.Create);


for (long i = 0; i < len; i++)
{
outp.WriteByte(mass[i]);
}
outp.Close();

FastZip zip = new FastZip();


zip.ExtractZip(ArchiveName, CatalogueName, null);
}

else
{
success = false;
Console.WriteLine("Произошла ошибка");
Console.ReadLine();
}
}
catch (Exception exc)
{
success = false;
Console.WriteLine("Произошла ошибка");
Console.WriteLine("{0}", exc);
Console.ReadLine();
}

if (success == true)

6
{
Console.WriteLine("Извлечение из архива прошло успешно");
Console.ReadLine();
}
}

static void Main(string[] args)


{
//Меню
Console.WriteLine("Добро пожаловать! Выберите действие:");
Console.WriteLine("1 - Создание архива");
Console.WriteLine("2 - Извлечение из архива");

int v;
v = Convert.ToInt32(Console.ReadLine());
Console.WriteLine();

if (v == 1) Add();
if (v == 2) Extract();
}
}
}

Инструкция пользователю
Программа, созданная при выполнении данной лабораторной работы,
осуществляет создание защищенного архива с полным сохранением
файловой структуры и извлечение информации из защищенного архива.
При запуске программы на экран выводится меню: «1 – Создание
архива. 2 – Извлечение из архива». При выборе «1» осуществляется
архивирование заданной директории и расчет контрольной суммы
защищенного архива. Необходимо задать следующую информацию: путь к
каталогу, который требуется архивировать (пример ввода: D:\\test); путь к
создаваемому архиву (пример ввода: D:\\a\ar.zip); ключ для шифрования
архива. В случае успешного создания архива выводится сообщение:
«Архивирование прошло успешно», иначе выводится сообщение
«Произошла ошибка». Значение контрольной суммы записывается в файл
hash.txt.
При выборе «2» осуществляется сравнение контрольной суммы
зашифрованного архива с ранее рассчитанным значением. В случае
равенства значений происходит расшифрование архива и извлечение файлов.
Необходимо задать следующую информацию: путь к архиву (пример ввода:
7
D:\\a\ar.zip); путь к каталогу, в который требуется извлечь файлы из архива
(пример ввода: D:\\a). В случае успешной проверки контрольной суммы
необходимо ввести ключ для расшифрования архива. В случае успешного
извлечения файлов из архива выводится сообщение: «Извлечение из архива
прошло успешно», иначе выводится сообщение «Произошла ошибка».

Инструкция программисту
Программа, созданная при выполнении данной лабораторной работы,
осуществляет создание защищенного архива с полным сохранением
файловой структуры и извлечение информации из защищенного архива.
Программа содержит следующие функции:
 void Add() – создание архива;
 void Extract() – извлечение информации из архива.

Результаты работы программы


При запуске программы на экран выводится меню: «1 – Создание
архива. 2 – Извлечение из архива» (рисунок 1).

Рисунок 1 – Главное меню программы

Рисунок 2 – создание архива ar.zip.

Рисунок 2 – Создание архива

8
Рисунок 3 – содержимое папки D:\\test до архивирования.

Рисунок 3 – Содержимое папки D:\\test

Рисунок 4 – архив ar.zip, созданный в результате работы программы.

Рисунок 4 - Созданный архив D:\\a\ar.zip

Рисунок 5 – содержимое файла hash.txt (контрольная сумма созданного


архива ar.zip).

Рисунок 5 – Содержимое файла hash.txt

Рисунок 6 – извлечение информации из архива ar.zip в папку D:\\a.

Рисунок 6 – Извлечение информации

9
Рисунок 7 – содержимое папки D:\\a после извлечения информации из
архива.

Рисунок 7 – Содержимое папки D:\\a

5. Вывод
В процессе выполнения лабораторной работы мы изучили варианты
хранения конфиденциальной информации в защищенных контейнерах.
Способом повышения уровня безопасности хранения данных является
хранение данных на диске в зашифрованной форме. Шифрование - это
процесс преобразования данных в формат, недоступный для чтения другим
пользователям. После того как файл был зашифрован, он автоматически
остается зашифрованным в любом месте хранения на диске. Расшифровка -
это процесс преобразования данных из зашифрованной формы в его
исходный формат.

10

Вам также может понравиться