Разработка объектно-ориентированного приложения требует значительного концептуального, логического и физического планирования. Необходимо четко определить количество объектов, их соответствие реальным, физическим объектам, иерархию их взаимодействия.
Разработка диаграммы классов является важнейшим этапом при проектировании приложения. Необходимо тщательно продумать все связи между классами и объектами программы, так как неправильная организация может привести к серьезным последствиям в будущем, вплоть до неработоспособности программного продукта.
Диаграмма классов, изображенная на рисунке 3.1 показывает, из каких объектов состоит программа и как они связаны между собой.
Рисунок 3.1 – Диаграмма классов программы
В основе всей каркасной модели лежит главное окно программы, на котором представлен весь интерфейс управления. В главном окне содержатся несколько панелей, на каждой из которых содержатся элементы специализированного управления:
− plCrypt - содержит методы для работы со списком файлов - контейнеров, а так же с файлом, который необходимо сокрыть;
− plEnCrypt - содержит методы для работы со списком файлов - контейнеров, а так же с ключом, необходимым для дешифрования извлеченного файла, если используется шифрование;
− plOptions - содержит методы настройки программы, в которой задается возможность использования шифрования, способность сохранения файлов, а так же позволяет менять старшинство бит, в которых будет происходить замена;
− plHelp - содержится компонент для отображения справки;
− plAbout - содержит информацию о разработке и разработчике.
Классы plCrypt и plEnCrypt наследуются от одного родителя WorkWav, который содержит все свойства и методы для сокрытия, извлечения, шифрования файлов.
|
Класс WorkWav наследуется от класса wRiff, который содержит информацию о структуре аудио файлов их свойствах.
Класс Loading содержит методы для отображения процесса сокрытия.
Рассмотрим основные классы более подробно.
Класс wRiff, как родитель всех остальных классов, содержит свойства о структуре аудио файлов. Его свойства представлены в таблице 3.1.
Таблица 2.2 - Свойства класса wRiff
Свойство | Описание |
char[] headerRIFF | Возвращает идентификатор "RIFF". |
int sizeRIFF | Возвращает длину файла (в байтах) без заголовка. |
char[] headerWAVE | Возвращает идентификатор формата "WAVE''. |
char[] headerFMT | Возвращает идентификатор "fmt'' (начало format чанки). |
int sizeFMT | Возвращает длину сегмента формата (format chunk size) без заголовка. |
Int16 FormatTag | Возвращает индекс способа кодирования звука (format tag) 1 = PCM. |
Int16 Channels | Возвращает число каналов. |
int SamplesPerSec | Возвращает частоту семплирования в Гц. |
int AvgBytesPerSec | Возвращает среднее число байт в секунду. |
Int16 BlockAlign | Возвращает количество байт для одного семпла (отсчета) 1 = 8 бит, моно 2 = 8 бит, стерео или 16 бит, моно 4 = 16 бит, стерео. |
Int16 BitPerSample | Возвращает количество бит для одного семпла. |
Продолжение таблицы 2.2
int sizeDATA | Возвращает длину сегмента данных. |
byte[] DataChunk8 | Возвращает массив данных, содержащихся в чанке Data, если количество бит для одного семпла равно 8. |
UInt16[] DataChunk16 | Возвращает массив данных, содержащихся в чанке Data, если количество бит для одного семпла равно 16. |
Класс WorkWav содержит свойства и методы для работы с аудио файлами, а так же содержит процедуры и функции для сокрытия информации в файлах контейнерах и извлечения скрытой информации. Данный класс предусматривает работу с алгоритмом симметричного шифрования Rijndael. Свойства и методы данного класса представлены на таблице 2.3.
|
Таблица 2.3 - Свойства и методы класса WorkWav
Свойство/метод | Описание |
List<wRiff> Riff | Возвращает экземпляр класса wRiff, который содержит информацию об открываемом файле формата *.wav. |
List<string> NameFiles | Возвращает список названий всех открытых файлов контейнеров. |
Продолжение таблицы 2.3
long razriad | Возвращает значение текущего разряда в байте. Это необходимо, чтобы узнать, чему равен бит в текущей позиции байта. |
byte[] byteFile | Служит для хранения файла, который необходимо сркрыть. |
long sizeFile | Возвращает размер файла, который необходимо сокрыть. |
string andrew | Константа,значение которой равно "andrew". Служит в качестве ключевого слова для подтверждения присутствия скрытой инфрмации внутри файлов Контейнеров. |
byte cletter | Возвращает извлеченный байт из файлов контейнеров, затем конвертируется в символ, из которых составляется слово. Если это слово равно "andrew", значит в файлах контейнерах скрытая информация. |
FileStream aFile | Файловый поток для записи/ открытия файла, который необходимо сокрыть. |
MemoryStream bufmem | Поток для хранения файла в памяти. |
byte[] kar1 | Возвращает значение текущего, считанного байта из файла, который необходимо сокрыть. |
Продолжение таблицы 2.3
int chbit | Задает значение номера бита, в который будет происходит сокрытие. |
bool OpenWavFile(string wNameFile,int nF) | Реализует процесс открытия файлов контейнеров в лист Riff. |
void OpenAnyFile(string aNameFile, LoadingDelegate deleg, int bt, int saveitem, int uShif, byte[] key, byte[] IV) | Реализует алгоритм сокрытия информации методом LSB, а так же метод симметричного шифрования. Если в настройках выбрано использовать шифрование, то файл, который необходимо сокрыть, сначала зашифровывается и лишь потом внедряется в файлы контейнеры. |
char loadKaretkaSlovo() | Производит сокрытие секретного слова. |
byte loadKaretKey() | Производит сокрытие ключа, который несет в себе информацию о том, сколько байтов при извлечении необходимо будет изъять из файлов контейнеров. |
byte loadKaretFile() | Производит сокрытие одного байта в файлы контейнеры. |
void Stego8(byte kar, long tekbit, int tekmas) | Реализует замену каждого n-го бита фалов контейнеров на бит файла, который необходимо сокрыть. Данная процедура работает только в том случае, если размер бит в семпле равно 8. |
|
Продолжение таблицы 2.3
void Stego16(byte kar, long tekbit, int tekmas) | Реализует замену каждого n-го бита файлов контейнеров на бит файла, который необходимо сокрыть. Данная процедура работает только в том случае, если размер бит в семпле равно 16. |
public bool OpenStegoFile(int bt) | Производит извлечение скрытого файла из файлов контейнеров. |
bool decodeslovo16(UInt16 kar) | Производит извлечение секретного слова. |
void decodekey16 (UInt16 kar) | Производит извлечение ключа, который несет в себе информацию о том, сколько байтов при извлечении необходимо будет изъять из файлов контейнеров. |
void decode16(UInt16 kar) | Производит извлечение одного байта в файлы контейнеры. |
void SaveFile(byte[] key, byte[] IV, int us) | Производит дешифровку, если файл был предварительно зашифрован и затем сохраняет извлеченный файл. |
void clearall() | Очищает весь список List. |
public void clearone(int tek) | Очищвет одну запись в List. |
void replaceone(int tek) | Заменяет одну запись в List. |
void checkbits(Int16 persample) | Происходит проверка, в какие биты производить сокрытие (в старшие, в средние, в младшие). |