Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
1398 of 1492 menu
◀ ▶

CryptoStream

CryptoStream в режиме Write пишет в MemoryStream. После FlushFinalBlock берут ToArray. Расшифровка тем же ключом и IV из Aes даёт "abcde". Поток закрывают через using.

Синтаксис

using CryptoStream crypto = new CryptoStream( target, encryptor, CryptoStreamMode.Write); crypto.Write(plain, 0, plain.Length); crypto.FlushFinalBlock();

Пример

Давайте зашифровать через поток:

using System; using System.IO; using System.Security.Cryptography; using System.Text; class Program { static void Main() { byte[] key = Encoding.UTF8.GetBytes( "12345678901234567890123456789012"); byte[] iv = Encoding.UTF8.GetBytes("1234567890123456"); byte[] plain = Encoding.UTF8.GetBytes("abcde"); using MemoryStream target = new MemoryStream(); using (Aes aes = Aes.Create()) { aes.Key = key; aes.IV = iv; using CryptoStream crypto = new CryptoStream( target, aes.CreateEncryptor(), CryptoStreamMode.Write); crypto.Write(plain, 0, plain.Length); crypto.FlushFinalBlock(); } byte[] cipher = target.ToArray(); using Aes aes = Aes.Create(); aes.Key = key; aes.IV = iv; byte[] decoded = aes.CreateDecryptor() .TransformFinalBlock(cipher, 0, cipher.Length); string res = Encoding.UTF8.GetString(decoded); Console.WriteLine(res); } }

Результат выполнения кода:

"abcde"

Пример

Давайте расшифровать через поток чтения:

using System; using System.IO; using System.Security.Cryptography; using System.Text; class Program { static void Main() { byte[] key = Encoding.UTF8.GetBytes( "12345678901234567890123456789012"); byte[] iv = Encoding.UTF8.GetBytes("1234567890123456"); byte[] plain = Encoding.UTF8.GetBytes("abcde"); byte[] cipher; using (MemoryStream target = new MemoryStream()) using (Aes aes = Aes.Create()) { aes.Key = key; aes.IV = iv; using CryptoStream crypto = new CryptoStream( target, aes.CreateEncryptor(), CryptoStreamMode.Write); crypto.Write(plain, 0, plain.Length); crypto.FlushFinalBlock(); cipher = target.ToArray(); } using MemoryStream source = new MemoryStream(cipher); using Aes aes = Aes.Create(); aes.Key = key; aes.IV = iv; using CryptoStream crypto = new CryptoStream( source, aes.CreateDecryptor(), CryptoStreamMode.Read); using MemoryStream output = new MemoryStream(); crypto.CopyTo(output); string res = Encoding.UTF8.GetString(output.ToArray()); Console.WriteLine(res); } }

Результат выполнения кода:

"abcde"

Пример

Давайте проверить, что шифр не пустой:

using System; using System.IO; using System.Security.Cryptography; using System.Text; class Program { static void Main() { byte[] key = Encoding.UTF8.GetBytes( "12345678901234567890123456789012"); byte[] iv = Encoding.UTF8.GetBytes("1234567890123456"); byte[] plain = Encoding.UTF8.GetBytes("abcde"); using MemoryStream target = new MemoryStream(); using (Aes aes = Aes.Create()) { aes.Key = key; aes.IV = iv; using CryptoStream crypto = new CryptoStream( target, aes.CreateEncryptor(), CryptoStreamMode.Write); crypto.Write(plain, 0, plain.Length); crypto.FlushFinalBlock(); } byte[] cipher = target.ToArray(); bool res = cipher.Length > 0; Console.WriteLine(res); } }

Результат выполнения кода:

True

Смотрите также

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить