У меня есть приложение Windows (x64), которое отлично работает на Winodws 7, 8 и теперь 10. Сегодня нам не удалось запустить программу под Windows 2012 Server. Когда мы просмотрели журнал событий, мы обнаружили ошибку, происходящую от System.Security.Cryptography.RijndaelManaged..ctor()
(к сожалению, журнал не дал нам полного пути).
Я использовал алгоритм Rijndael для шифрования конфиденциальных данных в своей программе. Первое, что делает программа, — извлекает зашифрованный файл конфигурации и расшифровывает его, чтобы получить все настройки. И вот тут у меня программа не запускается.
Это метод расшифровки в моей программе:
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);
}
}
}
}
}
}
И это сообщение об ошибке, которое я получаю в журнале:
Приложение: Postbag.exe Framework Версия: v4.0.30319 Описание: Процесс был прерван из-за необработанного исключения. Информация об исключении: System.InvalidOperationException в System.Security.Cryptography.RijndaelManaged..ctor() в Common.StringCipher.Decrypt(System.String, System.String) в Common.Conf..cctor() Информация об исключении: System.TypeInitializationException в Common.Conf.get_DataProvider() в Postbag.FormMain..ctor() в Postbag.Program.Main()
Новый сервер также имеет те же версии .Net framework.
new RijndaelManaged()
наAes.Create()
. Он выдаст тот же результат, но не будет иметь исключения FIPS. - person bartonjs   schedule 19.09.2017