Зачем нужен IV в AES(System.Security.Cryptography) - C#
Формулировка задачи:
Суть такова:
мне нужно написать методы Encode/Decode для своего класса, которые будут принимать на вход массив, криптовать с помощью AES. Для AES я подготовил красивый 128-ми битный ключ шифрования. И тут, внезапно, узнал, что от меня еще хотят какой-то IV. Возможно, мне надо немного поспать, т к сейчас 12:12 ночи(sic!), но годного описания IV(вектор инициализации) я не нашел. Да и на вике нет информации по вектору инициализации, что заставляет меня грустить.
Пожалуйста, помогите кто чем может понять/написать метод шифрования. Вот то, что есть сейчас(просто стянул со stackoverflow, там на него ругаются)
Немного об алгоритме:
есть байт массив. я беру от него md5 и дописываю в конец. Это соль. Потом шифрую с помощью AES ключом, который уже получен сложным способом и отсылаю другому человеку.
static byte[] EncryptStringToBytes(string plainText, byte[] Key, byte[] IV)
{
byte[] encrypted;
// Create an RijndaelManaged object
// with the specified key and IV.
using (RijndaelManaged rijAlg = new RijndaelManaged())
{
rijAlg.Key = Key;
rijAlg.IV = IV;
// Create a decrytor to perform the stream transform.
ICryptoTransform encryptor = rijAlg.CreateEncryptor(rijAlg.Key, rijAlg.IV);
// Create the streams used for encryption.
using (MemoryStream msEncrypt = new MemoryStream())
{
using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
{
using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
{
//Write all data to the stream.
swEncrypt.Write(plainText);
}
encrypted = msEncrypt.ToArray();
}
}
}
// Return the encrypted bytes from the memory stream.
return encrypted;
}Решение задачи: «Зачем нужен IV в AES(System.Security.Cryptography)»
textual
Листинг программы
Aes aes = Aes.Create(); aes.GenerateIV();