Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #72, НОЯБРЬ 2006 г.

военная тайна

ДРОЗДОВ АНДРЕЙ AKA SULVERUS

Спецвыпуск: Хакер, номер #072, стр. 072-034-5


decrypt.Close();

}

public static void NormalEncrypt(string OpenTextFile, string OpenKeyFile, string OutputFileName)

{

try

{

XmlTextReader OpenKeyLoader = new XmlTextReader(OpenKeyFile);

OpenKeyLoader.WhitespaceHandling = WhitespaceHandling.None;

OpenKeyLoader.Read(); //загружаем открытый ключ

string OpenKey = OpenKeyLoader.ReadOuterXml();

RSACryptoServiceProvider RSApNormal = new RSACryptoServiceProvider();

//создаем провайдер

RSApNormal.FromXmlString(OpenKey);

StreamReader file = new StreamReader(OpenTextFile);

byte[] b_file = ASCIIEncoding.ASCII.GetBytes(file.ReadToEnd());

string crypt = Convert.ToBase64String(RSApNormal.Encrypt(b_file, false));

//шифруем

StreamWriter Encrypt = new StreamWriter(OutputFileName);

Encrypt.Write(crypt); /пишем в файл

Encrypt.Flush(); //сохраняем

Encrypt.Close(); //закрываем

Console.WriteLine("Done");

}

//далее обработка ошибок

}

//далее идет абсолютно аналогичная функция NewEncrypt()

}

В функции NormalEncrypt() создается криптопровайдер, потом регистрируется и загружается открытый ключ. Далее создается строка base64 c зашифрованными данными и записывается в файл. В msdn'e сказано, что при ручной загрузке ключа нежелательно просто использовать метод FromXmlString(), при создании провайдера необходимо передать ему параметр с настройками провайдера, которые заполняются в классе CspParameters. Для ручной загрузки необходимо указать свойство Flags значением CspProviderFlags.UseMachineKeyStore. Хотя можно работать и без Csp-параметров. После работы с алгоритмом RSA наш подопытный кролик в лице строки «№Xakep - Super Hypper Rulez!» будет выглядеть вот так:

листинг

i6EW8OgnopsiJfGSFtextX9TehCZDCCYFbbk68+4YUwjDapVvZISpr3TnRldZCcfGz9FfPZggZU/StpugGZk7G4s4HSWPuDQ/j1cMduuPhIBRhO/ 29hWp6yQHPBugvZq4g/rnlEy4kolKFtka7ScnChZ5akuokSuJ3nrQ5QJrSg=.

Такой шифротекст выглядит намного внушительнее, чем DES. Перейдем к сертификатам X.509

[сертификаты X.509.]

Прежде всего, сертификаты нужны для аутентификации клиента или сервера. Сертификаты используются любыми браузерами, например, Internet Explorer'ом. Для работы с сертификатами существует класс X509Certificate, а для работы с классом используется пространство имен System.Security.Cryptography.X509Certificates. Для выборки данных из сертификата нужно просто создать новый объект и строковые типы данных и затем при помощи методов класса X509Certuficate заполнять значения. Например, для того чтобы выгрузить сертификат SecureNet CA Class A и посмотреть его название и версию, нужно выполнить следующий код:

листинг

X509Certificate x509s = X509Certificate.CreateFromCertFile("SecureNetCA_ClassA.cer");

string Version = x509s.GetIssuerName();

Однако пока что использование сертификатов X.509 считается очень неудобным, поскольку на шифрование/дешифрование уходит много времени. Для аутентификации обычно используют хэширование. Самым распространенным способом хэширования на сегодняшний день является использование алгоритма MD5.

Назад на стр. 072-034-4  Содержание  Вперед на стр. 072-034-6