Автоматизация бизнеса

Пользовательский поиск

понедельник, 10 декабря 2012 г.

Класс CryptoStream

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

Можно использовать любой провайдер криптографии, который реализует интерфейс ICryptoTransform.
На примере увидим несколько таких провайдеров, которые находятся в пространстве имен System.Security.Cryptography.

Для сохранения шифрованных данных создается объект FileStream, который заключим в оболочку CryptoStream.  Через интерфейс ICryptoTransform можно определить основные операции криптографического преобразования. Интерфейс создается через метод CreateEncryptor класса SymmetricAlgorithm.


FileStream fs = new FileStream("xxx.dat", FileMode.Create, FileAccess.Write);
ICryptoTransform desencrypt = des.CreateEncryptor();
CryptoStream cryptostream = new CryptoStream(fs, desencrypt, CryptoStreamMode.Write);


Для шифровки строки сперва преобразуем строку в массив байтов с помощью класса Encoding и его метода GetBytes(). Получив массив байтов, записываем его в CryptoStream методом Write().


string myMessage = "Message from Pentagon";
byte[] mybytes = Encoding.Unicode.GetBytes(myMessage);
cryptostream.Write(mybytes, 0, mybytes.Length);

cryptostream.Close();
fs.Close();



Закрыв потоки можно приступит к дешифровки. Для этого зашифрованное сообщение считываем из файла и преобразуем к исходному виду.

FileStream fsread = new FileStream("xxx.dat", FileMode.Open, FileAccess.ReadWrite);
byte[] encbytes = new byte[fsread.Length];
fsread.Read(encbytes, 0, encbytes.Length);
fsread.Position = 0;

При дешифровки используется та же процедура. Главное отличие в применении метода CreateDecryptor().  Создадим новый массив байтов, в который считаем данные из CryptoStream, а затем воспользуемся методом GetString() класса Encoding, чтобы превратить массив байтов в строку.

ICryptoTransform desdecrypt = des.CreateDecryptor();
            CryptoStream cryptostream = new CryptoStream(fsread, desdecrypt, CryptoStreamMode.Read);
            byte[] decrByte = new byte[fsread.Length];
            cryptostream.Read(decrByte, 0, (int)fsread.Length);
            string decryptedtext = Encoding.Unicode.GetString(decrByte);



Здесь можете скачать исходники и демо версию программы.
Удачи. Делитесь мыслями!
Класс CryptoStream

Комментариев нет:

Отправить комментарий