военная тайна ДРОЗДОВ АНДРЕЙ AKA SULVERUS Спецвыпуск: Хакер, номер #072, стр. 072-034-4 [rsa security protection.] Алгоритм RSA - на мой взгляд, один из самых удобных и безопасных алгоритмов шифрования. Мои слова подтверждает тот факт, что RSA используется в банковских и платежно-карточных системах (Web Money, E-gold или PayPal). В ассиметричных алгоритмах ключ делится на открытую и закрытую часть. Информация может шифроваться открытой частью, которая также может быть передана по Сети, а для расшифровки данных потребуется закрытая часть, которая будет находиться в компьютере, расшифровывающем информацию. Снова создаем консольное приложение и регистрируем класс RSA. В нем будет три функции: RSA.NewEncrypt(), RSA.NormalEncrypt(), RSA.Decrypt(). Для шифрования нужно две функции на случай, если ключи нужно сгенерировать автоматически, и на случай, если используются готовые ключи (например, если необходимо зашифровать разные тексты одним ключом). Разница между ними в том, что при создании новых ключей все происходит автоматически, а при ручной загрузке нужно использовать метод RSACryptoServiceProvider.FromXmlString() для загрузки открытого ключа, поскольку для шифрования его достаточно. Далее необходимо перевести строковые данные в массив байтов и шифровать. Рассмотрим класс RSA: Работа с криптопровайдерами RSA public class rsa { static RSACryptoServiceProvider RSAp; //глобальный криптопровайдер public static void Decrypt(string OpenTextFile, string PrivateKeyFile, string OutputFileName) { XmlTextReader PrivateKeyLoader = new XmlTextReader(PrivateKeyFile); PrivateKeyLoader.WhitespaceHandling = WhitespaceHandling.None; PrivateKeyLoader.Read(); //загружаем ключи string PrivateKey = PrivateKeyLoader.ReadOuterXml(); StreamReader file = new StreamReader(OpenTextFile); string encrypted = file.ReadToEnd(); //загружаем шифротекст RSACryptoServiceProvider decr = new RSACryptoServiceProvider(); //создаем провайдер decr.FromXmlString(PrivateKey); //вставляем ключ byte[] buffer = Convert.FromBase64String(encrypted.Trim()); //расшифровываем string decrypted = ASCIIEncoding.UTF8.GetString(decr.Decrypt(buffer, false)); Console.WriteLine("Done"); StreamWriter decrypt = new StreamWriter(OutputFileName); decrypt.Write(decrypted); //пишем в файл decrypt.Flush(); //закрываем |