Вектор инициализации в AES

AES из System.Security.Cryptography для работы требует не только непосредственно секретный ключ но еще и некий вектор инициализации. Насколько я понял, он не представляет из себя никакой особой ценности и может передаваться открыто вместе с зашифрованными данными - т.е. его можно просто тупо дописать в конец зашифрованного файла и потом вытащить оттуда. В связи с этим у меня 2 вопроса - насколько уменьшится стойкость шифра, если его заполнить одними нулями, а также в случае, если несколько файлов шифруются одним и тем же ключом, как лучше - для каждого файла генерить свой вектор или для всех одинаковый? Для реализации использую код, полученный мною исключительно методом тыка по аналогии с шарпом:

PascalВыделить код

1
2
3
4
5
6
7
8
9
10
11
12
13
14

unit unit1;
uses System.Security.Cryptography;
function AES_128(data, key, iv:array of byte):array of byte;
begin
  var a := Aes.Create();
  a.KeySize := 128;
  a.Key := key;
  a.IV := iv;
  var b := a.CreateEncryptor();
  var c:array of byte := b.TransformFinalBlock(data, 0, Length(data));
  a.Clear();
  Result := c;
end;
end.

вроде работает, но хотелось бы узнать, это действительно то, что надо, т.е. под "зашифровать алгоритмом AES" подразумевается выполнение чего-то подобного?