военная тайна ДРОЗДОВ АНДРЕЙ 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. |