Хранение / преобразование ключа шифрования и IV в виде строк
Я смотрел на множество различных примеров шифрования C #. В большинстве примеров ключ шифрования, а также вектор инициализации (IV) передаются в методы шифрования / дешифрования в виде массива байтов.
Я хотел бы хранить Ключ и IV как строки. Ключ в модуле аппаратной безопасности и IV как nvarchar в базе данных SQL Server.
Я продолжаю сталкиваться с проблемами о том, как правильно преобразовать Ключ и IV в строку. В некоторых примерах говорится, что используется кодировка Base64, а в других -Encoding.UTF8
.
Вот пример, который генерирует IV и преобразует его в строку Base64 ...
using (var aesProvider = new AesCryptoServiceProvider())
{
aesProvider.GenerateIV();
var ivBase64 = Convert.ToBase64String(aesProvider.IV);
return ivBase64;
}
Однако, когда я передаю это строковое представление IV в метод шифрования, а затем преобразую его обратно в байтовый массив, следующий код терпит неудачу, говоря, что IV не является подходящим размером.
byte[] initVectorBytes = Encoding.UTF8.GetBytes(initializationVector);`
// intermediate code excluded for brevity
ICryptoTransform encryptor = symmetricKey.CreateEncryptor(keyBytes, initVectorBytes);
Существует ли стандартный способ преобразования ключа шифрования и IV назад и вперед между байтовым массивом и представлением строки?