розшифровка даних

Розшифровка є операцією, зворотною операції шифрування. У разі шифрування із закритим ключем необхідно знати ключ і вектор ініціалізації, які використовувалися при шифруванні даних. У разі шифрування з відкритим ключем потрібно знати або відкритий ключ (якщо дані шифрувалися за допомогою закритого ключа), або закритий ключ (якщо дані шифрувалися за допомогою відкритого ключа).

Процес розшифровки даних, які були зашифровані за допомогою симетричного алгоритму, схожий на процес шифрування цих даних. Для дешифрування даних, зчитувальних з будь-якого керованого об'єкта потоку, використовується клас CryptoStream спільно з класами симетричного шифрування, наданими .NET Framework.

У наступному прикладі показано створення нового екземпляра класу RijndaelManaged і використання його для розшифровки об'єкту CryptoStream. Спочатку створюється новий екземпляр класу RijndaelManaged. Потім створюється об'єкт CryptoStream і инициализируется зі значенням керованого потоку MyStream. Далі метод CreateDecryptor класу RijndaelManaged отримує ті ж самі ключ і вектор ініціалізації, що використовувалися при шифруванні, а потім передається в конструктор CryptoStream. Нарешті, перерахування CryptoStreamMode.Read передається конструктору CryptoStream. визначаючи доступ на читання з потоку.

Щоб Наведений вище приклад працював, необхідно встановити зашифроване підключення до Прослуховувач. Це підключення повинно використовувати ті ж самі ключ, вектор ініціалізації і алгоритм, які використовуються Прослуховувач. Якщо таке підключення встановлено, отримане повідомлення розшифровується і виводиться на консоль.

Як правило, одна зі сторін (сторона А) створює як відкритий, так і закритий ключі і зберігає ключ в пам'яті або в контейнері криптографічного ключа. Потім сторона А пересилає відкритий ключ іншій стороні (стороні Б). Сторона Б виробляє шифрування даних за допомогою відкритого ключа та передає дані стороні А. Отримавши дані, сторона А розшифровує їх за допомогою відповідного закритого ключа. Розшифровка буде успішною тільки в тому випадку, якщо сторона А використовує закритий ключ, що відповідає тому відкритому ключу, за допомогою якого дані були зашифровані.

Відомості про зберігання асиметричних ключів в безпечному контейнері криптографічного ключа і їх подальшому витяганні см. В розділі Практичний посібник. Зберігання асиметричних ключів в контейнері ключів.

У наступному прикладі демонструється розшифровка двох байтових масивів, що представляють собою симетричний ключ і вектор ініціалізації. Відомості про спосіб отримання асиметричного відкритого ключа з об'єкта RSACryptoServiceProvider в форматі, зручному для передачі третій стороні, див. Розділ Шифрування даних.