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"
Смотрите также
-
Key,
ключ AES -
CreateDecryptor,
расшифровка -
CreateEncryptor,
шифрование -
Aes,
класс AES