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?