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?