Защита информации в системах дистанционного обучения с монопольным доступом
Рефераты >> Программирование и компьютеры >> Защита информации в системах дистанционного обучения с монопольным доступом

LimitDaysDecrypt – количество дней, в течении которых будут функционировать сгенерированный алгоритм расшифрования.

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

interface IProtectFile : IDispatch

{

[id(1), helpstring("method Create New File")]

HRESULT Create(

[in] BSTR name,

[in] CreateMode mode,

[in] BSTR uptFileNameForWrite,

[out, retval] short *handle);

[id(2), helpstring("method Open File")]

HRESULT Open(

[in] BSTR name,

[in] BSTR uptFileNameForRead,

[in] BSTR uptFileNameForWrite,

[out, retval] short *handle);

[id(3), helpstring("method Close File")]

HRESULT Close(

[in] short handle);

[id(4), helpstring("method Write To File")]

HRESULT Write(

[in] short handle,

[in] VARIANT buffer,

[out, retval] long *written);

[id(5), helpstring("method Read From File")]

HRESULT Read(

[in] short handle,

[out] VARIANT *buffer,

[out, retval] long *read);

[id(6), helpstring("method Write String To File")]

HRESULT WriteString(

[in] short handle,

[in] BSTR buffer,

[out, retval] long *written);

[id(7), helpstring("method Read String From File")]

HRESULT ReadString(

[in] short handle,

[out] BSTR *buffer,

[out, retval] long *read);

[id(8), helpstring("method From File")]

HRESULT FromFile(

[in] short handle,

[in] BSTR FileName,

[out, retval] long *read);

[id(9), helpstring("method To File")]

HRESULT ToFile(

[in] short handle,

[in] BSTR FileName,

[out, retval] long *written);

};

Опишем функции в данном интерфейсе.

HRESULT Create(

[in] BSTR name,

[in] CreateMode mode,

[in] BSTR uptFileNameForWrite,

[out, retval] short *handle);

Функция Create служит для создания новых зашифрованных файлов. Поскольку во вновь созданный файл можно только писать, то функции необходим для работы только файл с алгоритмом шифрования. Имя файла с этим алгоритмом передается третьим параметром и является обязательным. Параметр mode имеет тип CreateMode, для чего он служит, было сказано ранее. При успешном создании файл, в handle возвращается его дескриптор. По окончании работы с файлом, его обязательно нужно закрыть, используя функцию Close.

Описание используемых параметров:

name – имя создаваемого файла.

mode – тип создаваемого файла (см. ранее описание типа CreateMode)

uptFileNameForWrite – имя файла с алгоритмом шифрования.

handle – возвращаемый дескриптор созданного файла.

HRESULT Open(

[in] BSTR name,

[in] BSTR uptFileNameForRead,

[in] BSTR uptFileNameForWrite,

[out, retval] short *handle);

Функция Open открывает уже ранее созданный зашифрованный файл. Файл может быть открыт как для чтения так и для записи. После чего производить с ним можно только одну из двух операций - чтение или запись данных. Это обусловлено тем, что записи в файле представляют собой блоки различного размера. Данная особенность является следствием необходимости хранения такого типа данных, как VARIANT. Таким образом, запись к данным в файле может быть только последовательная. И если после открытия файла произвести в него запись, то прочитать старые данные из него будет уже невозможно. Можно сказать, что открытие файла для записи эквивалентно его созданию, за парой исключений. Первое исключение состоит в том, что при открытии файла не указывается его тип. То есть нет необходимости указывать, следует паковать данные перед шифрованием или нет. Информация о типе берется из уже существующего файла. Второе состоит в том, что для открытия файла, в отличии от создания, обязательно необходим файл с алгоритмом расшифрования. Режим открытия файла зависит от того, указан ли файл с алгоритмом шифрования. Имя файла с алгоритмом расшифрования является обязательным параметром. Файл с алгоритмом расшифрования – нет. Если он не будет указан, то из такого файла возможно будет только чтение. Если указан, то будет возможно как чтение, так и запись. При успешном открытии файла в handle возвращается дескриптор этого файла. По окончании работы с файлом его обязательно нужно закрыть, используя функцию Close.

Описание используемых параметров:

name – имя открываемого файла.

uptFileNameForRead – имя файла с алгоритмом расшифрования.

uptFileNameForWrite – имя файла с алгоритмом шифрования.

handle – возвращаемый дескриптор открытого файла.

HRESULT Close(

[in] short handle);

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

Описание используемых параметров:

handle – дескриптор закрываемого файла.

HRESULT Write(

[in] short handle,

[in] VARIANT buffer,

[out, retval] long *written);

Функция Write производит запись в файл данных, переданных в переменной типа VARIANT. Запись производится в файл связанный с дескриптором, передаваемый в параметре handle. В возвращаемом значении written после завершения работы функции, будет указано количество байт записанных в файл.

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

Тип VARIANT предназначен для представления значений, которые могут динамически изменять свой тип. Если любой другой тип переменной зафиксирован, то в переменные VARIANT можно вносить переменные разных форматов. Шире всего VARIANT применяется в случаях, когда фактический тип данных изменяется или неизвестен в момент компиляции. Переменным типа VARIANT можно присваивать любые значения любых целых, действительных, строковых и булевых типов. Для совместимости с другими языками программирования предусмотрена также возможность присвоения этим переменным значений даты/времени. Кроме того, вариантные переменные могут содержать массивы переменной длины и размерности с элементами указанных типов. Все целые, действительные, строковые, символьные и булевы типы совместимы с типом VARIANT в отношении операции присваивания. Вариантные переменные можно сочетать в выражениях с целыми, действительными, строковыми, символьными и булевыми. При этом, например, все необходимые преобразования Delphi выполняет автоматически.


Страница: