Криптографические средства Microsoft .NET

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование

е 16-байтового массива. Следует иметь в виду, что некоторые реализации MD5 формируют 32-символьные значения хэша в шестнадцатеричном формате. Для обеспечения совместимости с такими реализациями необходимо представлять значения, возвращаемые методами ComputeHash, в шестнадцатеричном формате.

 

2. Классы для шифрования и расшифрования данных

 

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

Для формирования зашифрованного сообщения используются классы, наследованные от класса AsymmetricKeyExchangeFormatter. Для расшифрования данных используются классы, наследованные от класса AsymmetricKeyExchangeDeformatter.

В версии Microsoft .NET Framework 2.0 реализованы два класса для шифрования секретных данных с помощью алгоритма RSA:

RSAOAEPKeyExchangeFormatter,

RSAPKCS1KeyExchangeFormatter;

и два класса для расшифрования:

RSAOAEPKeyExchangeDeformatter,

RSAPKCS1KeyExchangeDeformatter.

Для реализации поддержки других асимметричных алгоритмов обмена ключами необходимо наследовать класс шифрования данных от класса AsymmetricKeyExchange Formatter и класс расшифрования данных от класса AsymmetricKeyExchangeDeformatter.

Классы используются для обмена секретной информацией с использованием алгоритма RSA. Для обмена данными классы используют формат PKCS #1.

Для шифрования данных с помощью класса RSAPKCS1KeyExchangeFormatter необходимо:

) Создать экземпляр класса.

Определить открытый ключ для шифрования данных можно передав в качестве параметра конструктора объект, представляющий алгоритм RSA, содержащий открытый ключ или же вызвав метод SetKey. Кроме того, можно определить, какой датчик случайных чисел использовать при формировании зашифрованных данных. Если не определить свойство Rnd, то датчик используется по умолчанию.

) Зашифровать ключевую информацию.

Для этого используется метод CreateKeyExchange. В качестве параметра он принимает данные, которые необходимые зашифровать.

Для расшифрования информации необходимо:

) Создать экземпляр класса RSAPKCS1KeyExchangeDeformatter.

Определить секретный ключ можно аналогично классу RSAPKCS1KeyExchangeFormatter.

) Расшифровать полученные данные.

Для этого необходимо вызвать метод DecryptKeyExchange, передав зашифрованные данные в качестве параметра.

 

2.1 Классы для формирования и проверки цифровой подписи

 

В Microsoft .NET Framework 2.0 существуют специализированные классы, осуществляющие автоматическое формирование подписанного документа. Для формирования подписи служат классы, наследованные от класса Asymmetric SignatureFormatter. Для проверки цифровой подписи используются классы, наследованные от класса AsymmetricSignatureDeformatter.

В версии Microsoft .NET Framework 2.0 реализованы два класса для формирования цифровой подписи:

DSASignatureFormatter,

RSAPKCS1SignatureFormatter;

и два класса для проверки цифровой подписи:

DSASignatureDeformatter,

RSAPKCS1SignatureDeformatter.

Подпись формируется в формате PKCS#1 версии 1.5.

Программист может добавить свои собственные классы для формирования и проверки цифровой подписи для любого криптографического алгоритма. Для этого необходимо наследовать класс формирования цифровой подписи от класса AsymmetricSignatureFormatter, а класс проверки цифровой подписи от класса AsymmetricSignatureDeformatter соответственно.

Для формирования цифровой подписи с использованием класса RSAPKCS1 SignatureFormatter необходимо:

)Создать экземпляр класса RSAPKCS1SignatureFormatter.

Определить секретный ключ для формирования подписи можно передав в качестве параметра конструктора объект, представляющий алгоритм RSA, который содержит секретный ключ, или передав объект в метод SetKey.

) Задать алгоритм вычисления значения хеша.

Это можно сделать с помощью метода SetHashAlgorithm. В качестве параметра он принимает название алгоритма. Например: SHA1.

)Сформировать подпись.

Для этого используется метод CreateSignature. В качестве параметра передается значение хеша подписываемых данных.

Для проверки подписи необходимо:

)Создать экземпляр класса RSAPKCS1SignatureDeformatter.

Задать открытый ключ для проверки подписи можно аналогично заданию ключа для класса RSAPKCS1SignatureFormatter.

) Задать алгоритм вычисления значения хеша.

) Проверить подпись.

Для этой цели используется метод VerifySignature. В качестве параметров задается значение хеша документа и подпись значения хеша.

3. Примеры

 

Симметричное шифрование.

В примере кода для зашифрования файла, заданного строкой inName, используется класс RijndaelManaged с заданным свойством Key и вектором инициализации (IV), а результат зашифрования выводится в файл, заданный строкой outName. Параметры desKey и desIV, передаваемые в данный метод, представляют собой 8-байтовые массивы. Для выполнения этого примера необходимо наличие установленного пакета стойкого шифрования.

Язык Visual C++

 

void EncryptData( String^ inName, String^ outName, array^rijnIV )

{

//Create the file streams to handle the input and output files.^ fin = gcnew FileStream( inName,FileMode::Open,FileAccess::Read );^ fout = gcnew FileStream( outName,FileMode::OpenOrCreate,FileAccess::Write );>SetLength( 0 );

//Create variables to help with read and write.CreateEncryptor( rijnKey, rijnIV ),CryptoStreamMode::Write );::WriteLine( "Encrypting..." );

//Read from the input f