- •Лабораторная работа №4 Использование функций криптографического интерфейса Windows для защиты информации Содержание задания
- •Индивидуальные варианты заданий
- •Возможный вид дополнительной диалоговой формы программы Окно запроса парольной фразы для расшифровки файла с учетными данными
- •Криптографические классы библиотеки Framework Class Library для использования в приложениях на платформе .Net
- •Криптографические многокомпонентные объекты библиотеки capicom (для использования в языках интерпретируемого типа)
- •Рекомендуемые для разработки программы средства языка Object Pascal
Возможный вид дополнительной диалоговой формы программы Окно запроса парольной фразы для расшифровки файла с учетными данными
Может быть создано на основе шаблона Password Dialog, выбираемого с помощью команды File | New | Dialogs систем программирования Borland Delphi или Borland C++ Builder. Для повышения безопасности эта форма должна быть исключена из списка автоматически создаваемых форм проекта (команда Project | Options | Forms) и создаваться (уничтожаться) в программе явным образом. В указаниях по выполнению лабораторных работ эта форма имеет имя Form6.
Криптографические классы библиотеки Framework Class Library для использования в приложениях на платформе .Net
Класс System.Security.Cryptography.RC2CryptoServiceProvider – реализация алгоритма симметричного шифрования RC2.
СвойствоCipherModeMode – режим шифрования.
Свойство unsigned char Key – криптографический ключ.
Свойство int KeySize – длина ключа в битах.
Свойство unsigned char IV – начальный вектор.
Метод ICryptoTransform* CreateEncryptor(unsigned char rgbKey [], unsigned char rgbIV[]) – создание объекта для шифрования с ключом rgbKey и начальным вектором rgbIV.
Метод ICryptoTransform* CreateDecryptor(unsigned char rgbKey [], unsigned char rgbIV []) − создание объекта для расшифрования с ключом rgbKey и начальным вектором rgbIV.
Класс.System.Security.Cryptography.CryptoStream – поток данных для шифрования и расшифрования.
Конструктор CryptoStream(Stream* stream, ICryptoTransform* transform, CryptoStreamMode mode) – создание криптографического потока для потока stream и криптографического объекта transform в режиме чтения (mode=CryptoStreamMode::Read) или записи (mode=CryptoStreamMode::Write).
Метод void Write(unsigned char buffer [], int offset, int count) – запись данных длиной count из буфера buffer со смещением offset.
Метод int Read(unsigned char buffer [], int offset, int count) – чтение данных в буфер buffer максимальной длины count со смещением offset.
Классы System.Security.Cryptography.MD5CryptoServiceProvider и System.Security.Cryptography.SHA1CryptoServiceProvider – реализации функций хеширования MD5 и SHA1.
Свойство int HashSize – длина хеш-значения в битах.
Метод unsigned char ComputeHash(unsigned char buffer []) [] – хеширование данных из буфера buffer.
Класс System.Random – генератор псевдослучайных чисел.
Конструктор Random() – инициализация генератора случайным значением
Метод void NextBytes(array<unsigned char>^ buffer) – получение случайного числа в буфере buffer.
Класс System.Security.Cryptography.RNGCryptoServiceProvider – генератор псевдослучайных чисел, реализованный в криптопровайдере.
Метод void GetBytes(array<unsigned char>^ data) – получение случайного числа в буфере data.
Класс FileStream – поток байт, связанный с файлом
Конструктор FileStream(String* path, FileMode mode) – создание потока, связанного с файлом path, открывающемся в режиме mode (Append, Create, Open или OpenOrCreate).
Свойство __int64 Length – длина потока в байтах.
Свойство __int64 Position – текущая позиция потока.
Метод int Read(unsigned char array [], int offset, int count) – чтение данных из потока.
Метод void Write(unsigned char array [], int offset, int count) запись данных в поток.
Метод __int64 Seek(__int64 offset, SeekOrigin origin) – перемещение текущей позиции потока на offset байт относительно origin (Begin, Current, End).
Метод void Close() – закрытие файла, связанного с потоком.
Класс System.IO.MemoryStream – поток байт, связанный с оперативной памятью.
Свойство long long Length – длина потока в байтах.
Свойство long long Position – текущая позиция потока.
Метод int Read(array<unsigned char>^ array, int offset, int count) – чтение данных из потока.
Метод void Write(array<unsigned char>^ array, int offset, int count) запись данных в поток.
Метод long long Seek(long long offset, SeekOrigin origin) – перемещение текущей позиции потока на offset байт относительно origin (Begin, Current, End).
Метод void Close() – закрытие потока и освобождение его ресурсов.
Класс System.Security.Cryptography.Rfc2898DeriveBytes – криптографический ключ, основанный на парольной фразе, хешируемой по алгоритму SHA1.
Конструктор Rfc2898DeriveBytes(String^ password, array<unsigned char>^ salt) – создание экземпляра класса на основе парольной фразы password и случайного значения (примеси) salt длиной 8 байт или более.
Конструктор Rfc2898DeriveBytes(String^ password, int saltSize) − создание экземпляра класса на основе парольной фразы password и задаваемой длины примеси saltSize.
Свойство array<unsigned char>^ Salt – значение примеси.
Метод array<unsigned char>^ GetBytes(int cb) – получение ключа длиной cb байт.
Класс System.Security.Cryptography.PasswordDeriveBytes − криптографический ключ, основанный на парольной фразе.
Конструктор PasswordDeriveBytes(String^ strPassword, array<unsigned char>^ rgbSalt) − создание экземпляра класса на основе парольной фразы strPassword и случайного значения (примеси) rgbSalt.
Конструктор PasswordDeriveBytes(String^ strPassword, array<unsigned char>^ rgbSalt, String^ strHashName, int iterations) − создание экземпляра класса на основе парольной фразы strPassword и случайного значения (примеси) rgbSalt с использованием функции хеширования strHashName и количества итераций iterations.
Свойство String^ HashName – имя функции хеширования.
Свойство array<unsigned char>^ Salt – значение примеси.
Метод array<unsigned char>^ CryptDeriveKey(String^ algname, String^ alghashname, int keySize, array<unsigned char>^ rgbIV) – получение ключа длиной keySize бит (если указан 0, то используется длина ключа по умолчанию для заданного алгоритма) для алгоритма algname с помощью функции хеширования alghashname и начального вектора rgbIV.
Метод array<unsigned char>^ GetBytes(int cb) – получение ключа длиной cb байт.