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

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

ДРОЗДОВ АНДРЕЙ 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(); //закрываем

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