Speichern / Konvertieren des Verschlüsselungsschlüssels und der IV als Zeichenfolgen

Ich habe mir viele verschiedene C # -Verschlüsselungsbeispiele angesehen. In den meisten Beispielen werden der Verschlüsselungsschlüssel sowie der Initialisierungsvektor (IV) als Array von Bytes an die Verschlüsselungs- / Entschlüsselungsmethoden übergeben.

Ich möchte den Key und IV als Strings speichern. Der Schlüssel in einem Hardware-Sicherheitsmodul und das IV als nvarchar in der SQL Server-Datenbank.

Ich habe immer wieder Probleme, wie ich den Key und den IV als String richtig konvertieren kann. Einige Beispiele geben an, Base64-Codierung zu verwenden, während andere Beispiele @ verwendeEncoding.UTF8.

Hier ist ein Beispiel, das eine IV generiert und in eine Base64-Zeichenfolge konvertiert ...

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

Wenn ich diese Zeichenfolgendarstellung der IV in die Verschlüsselungsmethode übergebe und sie dann wieder in ein Byte-Array umwandle, schlägt der folgende Code fehl und besagt, dass die IV nicht die richtige Größe hat.

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

Gibt es eine Standardmethode zum Konvertieren eines Verschlüsselungsschlüssels und IV zwischen einem Byte-Array und einer Zeichenfolgendarstellung?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage