Реализация программы

В нашей программе будем использовать следующие функции:

1) Функция для записи файла последовательностью случайных чисел.

private static void WriteRandNum(string fileName, int count)

{

FileInfo f = new FileInfo(fileName);

long len = f.Length;

for (int j = 0; j < count; j++)

{

Random rnd = new Random();

byte[] bytes = new byte[len];

rnd.NextBytes(bytes);

File.WriteAllBytes(fileName, bytes);

}

}

В данную функцию в качестве формальных параметров предаётся путь к файлу и число раз, которое необходимо повторить цикл перезаписи.

Сначала мы определяем размер заданного файла. Затем создаем массив байт равный размеру файла, и заполняем его случайными числами. Далее перезаписываемый файл открывается, в него происходит запись сгенерированного ранее массива случайных чисел и файл закрывается.

2) Функция для записи файла битовой маской.

private static void WriteBitMask(string fileName, byte bitMask, int count)

{

FileInfo f = new FileInfo(fileName);

long len = f.Length;

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

{

byte[] bytes = new byte[len];

for (int j = 0; j < len; j++)

{

bytes[i] = bitMask;

}

File.WriteAllBytes(fileName, bytes);

}

}

В данную функцию в качестве формальных параметров предаётся путь к файлу, байт которым будет перезаписан файл и число раз, которое необходимо повторить цикл перезаписи.

Сначала мы определяем размер заданного файла. Затем создаем массив байт равный размеру файла и заполняем его ячейки указанным байтом. Далее перезаписываемый файл открывается, в него происходит запись созданного ранее массива байтов и файл закрывается.

3) Функция для риверсирования данных

private static void Reverse(string fileName)

{

FileStream fstream = new FileStream(fileName, FileMode.Open);

long len = fstream.Length;

byte[] bits = new byte[len];

MemoryStream ms = new MemoryStream();

fstream.CopyTo(ms);

fstream.Close();

Array.Reverse(ms.ToArray());

Array.Copy(ms.ToArray(), bits, len);

File.WriteAllBytes(fileName, bits);

}

В данную функцию в качестве формальных параметров предаётся путь к файлу. Мы открываем файл, определяем его размер. После чего с помощью нехитрых манипуляций помещаем содержимое файла в массив, инвертируем его, и записываем обратно в файл.

4) Функция реализующая алгоритм DoD (вариант Е)

private static void DOD3(string fileName)

{

//Перезапись случайными числами

WriteRandNum(fileName, 1);

//Инвертирование данных

Reverse(fileName);

//Перезапись случайными числами

WriteRandNum(fileName, 1);

//Удаление указателя на файл

File.Delete(fileName);

}

В данную функцию в качестве формальных параметров предаётся путь к файлу. Согласно алгоритму, мы последовательно производим перезапись файла случайными числами, затем инвертируем их, и снова записываем случайными числами. После перезаписи происходит удаление указателя на файл.

5) Функция реализующая алгоритм DoD (вариант ЕСЕ)

private static void DOD7(string fileName)

{

//Перезапись байтом #FF

WriteBitMask(fileName, 0xFF, 3);

//Перезапись байтом #00

WriteBitMask(fileName, 0x00, 3);

//Перезапись байтом #F6

WriteBitMask(fileName, 0xF6, 1);

//Удаление указателя на файл

File.Delete(fileName);

}

В данную функцию в качестве формальных параметров предаётся путь к файлу. Согласно алгоритму, перезапись производится три раза байтом #FF, три раза байтом #00 и один раз байтом #F6. В завершении удаляется указатель на файл.


6) Функция реализующая алгоритм Питера Гутмана

private static void Gutmann(string fileName)

{

//Перезапись случайными числами (первые 4 цикла)

WriteRandNum(fileName, 4);

//Перезапись битовыми масками

WriteBitMask(fileName, 0x55, 3);

WriteBitMask(fileName, 0xAA, 3);

WriteBitMask(fileName, 0x92, 1);

WriteBitMask(fileName, 0x49, 1);

WriteBitMask(fileName, 0x24, 1);

WriteBitMask(fileName, 0x49, 1);

WriteBitMask(fileName, 0x24, 1);

WriteBitMask(fileName, 0x92, 1);

WriteBitMask(fileName, 0x24, 1);

WriteBitMask(fileName, 0x92, 1);

WriteBitMask(fileName, 0x49, 1);

WriteBitMask(fileName, 0x00, 3);

WriteBitMask(fileName, 0x11, 3);

WriteBitMask(fileName, 0x22, 3);

WriteBitMask(fileName, 0x33, 3);

WriteBitMask(fileName, 0x44, 3);

WriteBitMask(fileName, 0x55, 3);

WriteBitMask(fileName, 0x66, 3);

WriteBitMask(fileName, 0x77, 3);

WriteBitMask(fileName, 0x88, 3);

WriteBitMask(fileName, 0x99, 3);

WriteBitMask(fileName, 0xAA, 3);

WriteBitMask(fileName, 0xBB, 3);

WriteBitMask(fileName, 0xCC, 3);

WriteBitMask(fileName, 0xDD, 3);

WriteBitMask(fileName, 0xEE, 3);

WriteBitMask(fileName, 0xFF, 3);

WriteBitMask(fileName, 0x92, 1);

WriteBitMask(fileName, 0x49, 1);

WriteBitMask(fileName, 0x24, 1);

WriteBitMask(fileName, 0x49, 1);

WriteBitMask(fileName, 0x24, 1);

WriteBitMask(fileName, 0x92, 1);

WriteBitMask(fileName, 0x24, 1);

WriteBitMask(fileName, 0x92, 1);

WriteBitMask(fileName, 0x49, 1);

WriteBitMask(fileName, 0x6D, 1);

WriteBitMask(fileName, 0xB6, 1);

WriteBitMask(fileName, 0xDB, 1);

WriteBitMask(fileName, 0xB6, 1);

WriteBitMask(fileName, 0xDB, 1);

WriteBitMask(fileName, 0x6D, 1);

WriteBitMask(fileName, 0xDB, 1);

WriteBitMask(fileName, 0x6D, 1);

WriteBitMask(fileName, 0xB6, 1);

//Перезапись случайными числами (последние 4 цикла)

WriteRandNum(fileName, 4);

//Удаление указателя на файл

File.Delete(fileName);

}

В данную функцию в качестве формальных параметров предаётся путь к файлу. Согласно алгоритму, первые и последние 4 цикла файл перезаписывается случайными числами, а с пятый по тридцать первый битовыми масками, основанными на теории уничтожения информации.

7) Функция для вызова конкретного метода удаления

public static void Erase(string item, int selectedIndex)

{

switch (selectedIndex)

{

case 0:

DOD3(item);

break;

case 1:

DOD7(item);

break;

case 2:

Gutmann(item);

break;

}

}

В данную функцию в качестве формальных параметров предаётся путь к файлу и номер метода, который выбрал пользователь.

8) Функция для удаления каталога и его содержимого

public static void DirSearch(string sDir, int selectedIndex)

{

foreach (string d in Directory.GetDirectories(sDir))

{

foreach (string f in Directory.GetFiles(d))

{

Erase(f, selectedIndex);

}

DirSearch(d, selectedIndex);

Directory.Delete(d);

}

foreach (string f in Directory.GetFiles(sDir))

{

Erase(f, selectedIndex);

}

}

В данную функцию в качестве формальных параметров предаётся путь к файлу и номер метода, который выбрал пользователь. В этой функции мы выявляем каталоги. Также мы проверяем находиться ли в данном каталоге другие каталоги. Функция является рекурсивной т.к. она вызывает сама себя.

Все файлы, находящиеся в каталоге удаляются по выбранному пользователем методу, после чего удаляется сама папка.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: