Ich habe eine Windows-Anwendung (x64), die auf Winodws 7, 8 und jetzt 10 funktioniert. Heute haben wir das Programm unter einem Windows 2012 Server ausgeführt. Als wir uns das Ereignisprotokoll angesehen haben, haben wir einen Fehler gefunden, der von System.Security.Cryptography.RijndaelManaged..ctor()
stammt (leider hat uns das Protokoll nicht den vollständigen Pfad angegeben).Rijndael Kryptografie funktioniert nicht unter Windows Server 2012
Ich habe den Algorithmus Rijndael verwendet, um vertrauliche Daten in meinem Programm zu verschlüsseln. Das erste, was das Programm macht, ist, die verschlüsselte Konfigurationsdatei abzurufen und zu entschlüsseln, um alle Einstellungen zu erhalten. Und hier startet mein Programm nicht.
Dies ist die Entschlüsselungs-Methode in meinem Programm:
public static string Decrypt(string cipherText, string passPhrase)
{
byte[] cipherTextBytes = Convert.FromBase64String(cipherText);
using (PasswordDeriveBytes password = new PasswordDeriveBytes(passPhrase, null))
{
byte[] keyBytes = password.GetBytes(keysize/8);
using (RijndaelManaged symmetricKey = new RijndaelManaged())
{
symmetricKey.Mode = CipherMode.CBC;
using (ICryptoTransform decryptor = symmetricKey.CreateDecryptor(keyBytes, initVectorBytes))
{
using (MemoryStream memoryStream = new MemoryStream(cipherTextBytes))
{
using (CryptoStream cryptoStream = new CryptoStream(memoryStream, decryptor, CryptoStreamMode.Read))
{
byte[] plainTextBytes = new byte[cipherTextBytes.Length];
int decryptedByteCount = cryptoStream.Read(plainTextBytes, 0, plainTextBytes.Length);
return Encoding.UTF8.GetString(plainTextBytes, 0, decryptedByteCount);
}
}
}
}
}
}
Und das ist die Fehlermeldung, die ich im Protokoll erhalten:
Anwendung: Postbag.exe Framework Version: v4.0.30319 Beschreibung : Der Prozess wurde aufgrund einer nicht behandelten Ausnahme beendet. Ausnahme: Info: System.InvalidOperationException um System.Security.Cryptography.RijndaelManaged..ctor() um Common.StringCipher.Decrypt (System.String, System.String) um Common.Conf..cctor() Ausnahme: System.TypeInitializationException bei Common.Conf.get_DataProvider() bei Postbag.FormMain..ctor() bei Postbag.Program.Main()
der neue Server hat auch die gleichen Versionen von .NET Framework.
Da Sie die Blockgröße nicht ändern, sollten Sie 'new RijndaelManaged()' durch 'Aes.Create()' ersetzen. Es wird die gleiche Ausgabe erzeugen, aber keine FIPS-Ausnahme. – bartonjs