Шифрування даних, Microsoft Docs
Для здійснення симетричного та асиметричного шифрування використовуються різні процеси. Симетричне шифрування виконується у потоках, тому воно підходить для шифрування великих обсягів даних. Асиметричне шифрування застосовується до коротких байтових послідовностей, тому воно застосовується для шифрування лише малих обсягів даних.
Симетричне шифрування
Керовані класи симетричного шифрування використовуються зі спеціальним класом потоку CryptoStream, який здійснює шифрування даних, що зчитуються з потоку. КласCryptoStream ініціалізується за допомогою керованого класу потоку, що реалізує інтерфейс ICryptoTransform (створений на основі класу, що реалізує криптографічний алгоритм), а також перерахування CryptoStreamMode, що визначає дозволений тип доступу доCryptoStream. КласCryptoStream може бути ініціалізований за допомогою будь-якого класу, похідного від класу Stream, включаючи FileStream, MemoryStream та NetworkStream. За допомогою цих класів можна здійснювати симетричне шифрування різних потокових об'єктів.
У наступному прикладі показано, як створити новий екземпляр класу RijndaelManaged, що реалізує алгоритм шифрування Rijndael, та використовувати його для шифрування класуCryptoStream. У цьому прикладіCryptoStream ініціалізується за допомогою об'єкта потоку MyStream, який може бути будь-яким типом керованого потоку. МетодCreateEncryptor класуRijndaelManaged отримує значення ключа та вектора ініціалізації, які використовуються для шифрування. В даному випадку використовуються значення ключа та вектора ініціалізації, які створюються за замовчуванням з RMCrypto. І нарешті передаєтьсяCryptoStreamMode.Write, визначаючи дозвіл на запис у потік.
Після виконання цього коду будь-які дані, що записуються в об'єктCryptoStream, зашифровуються за допомогою алгоритму Rijndael.
У наступному прикладі показаний весь процес створення потоку, шифрування потоку, запису в потік та закриття потоку. У прикладі створюється мережевий потік, який зашифровується за допомогою класівCryptoStream таRijndaelManaged. Повідомлення записується у зашифрований потік за допомогою класу StreamWriter.
Даний приклад можна використовувати для запису у файл. Для цього видаліть посилання TcpClient і замініть елемент NetworkStream на FileStream.
Однак, якщо вказаний процес не знайдено або виник виняток, на консоль виводиться наступний текст:
Асиметричне шифрування
Асиметричні алгоритми зазвичай використовуються для шифрування малих обсягів даних, наприклад, для шифрування симетричного ключа та вектора ініціалізації. Найчастіше особа, яка здійснює асиметричне шифрування, використовує відкритий ключ, створений іншою стороною. Для цього в .NET Framework надається клас RSACryptoServiceProvider.