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

IV

IV у Aes должен быть 16 байт. Пример: Encoding.UTF8.GetBytes("1234567890123456"). Неверная длина даёт CryptographicException. Другой IV при расшифровке не восстанавливает "abcde".

Синтаксис

aes.IV = Encoding.UTF8.GetBytes("1234567890123456");

Пример

Давайте проверить длину допустимого IV:

using System; using System.Security.Cryptography; using System.Text; class Program { static void Main() { byte[] iv = Encoding.UTF8.GetBytes("1234567890123456"); using Aes aes = Aes.Create(); aes.IV = iv; int res = aes.IV.Length; Console.WriteLine(res); } }

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

16

Пример

Давайте поймаем IV неверной длины:

using System; using System.Security.Cryptography; using System.Text; class Program { static void Main() { byte[] badIv = Encoding.UTF8.GetBytes("123456789012345"); try { using Aes aes = Aes.Create(); aes.IV = badIv; } catch (CryptographicException) { Console.WriteLine("fail"); } } }

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

"fail"

Пример

Давайте расшифровать с другим IV. Дополнение PKCS7 не сходится:

using System; 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[] wrongIv = Encoding.UTF8.GetBytes("0000000000000000"); byte[] plain = Encoding.UTF8.GetBytes("abcde"); byte[] cipher; using (Aes aes = Aes.Create()) { aes.Key = key; aes.IV = iv; cipher = aes.CreateEncryptor() .TransformFinalBlock(plain, 0, plain.Length); } try { using Aes aes = Aes.Create(); aes.Key = key; aes.IV = wrongIv; aes.CreateDecryptor() .TransformFinalBlock(cipher, 0, cipher.Length); Console.WriteLine("ok"); } catch (CryptographicException) { Console.WriteLine("fail"); } } }

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

"fail"

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

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