Armazenando / Convertendo a Chave de Criptografia e o IV como Sequências

Eu estive analisando muitos exemplos diferentes de criptografia C #. Na maioria dos exemplos, a chave de criptografia e o vetor de inicialização (IV) são passados para os métodos de criptografia / descriptografia como uma matriz de bytes.

Gostaria de armazenar a chave e o IV como seqüências de caracteres. A chave em um módulo de segurança de hardware e o IV como um nvarchar no banco de dados do SQL Server.

Eu continuo encontrando propblems sobre como converter corretamente a chave e o IV como string. Alguns exemplos dizem para usar a codificação Base64, enquanto outros exemplos usamEncoding.UTF8.

Aqui está um exemplo que gera um IV e o converte em uma string Base64 ...

using (var aesProvider = new AesCryptoServiceProvider())
{
    aesProvider.GenerateIV();
    var ivBase64 = Convert.ToBase64String(aesProvider.IV);
    return ivBase64;
}

No entanto, quando passo essa representação de string do IV para o método de criptografia e o converto novamente em uma matriz de bytes, o código a seguir falha dizendo que o IV não é do tamanho adequado.

byte[] initVectorBytes = Encoding.UTF8.GetBytes(initializationVector);`
// intermediate code excluded for brevity
ICryptoTransform encryptor = symmetricKey.CreateEncryptor(keyBytes, initVectorBytes);

Existe uma maneira padrão de converter uma chave de criptografia e um IV entre um array de bytes e a representação de String?

questionAnswers(1)

yourAnswerToTheQuestion