我有一個Windows應用程序(x64),它一直在Winodws 7,8和現在10上正常工作。今天,我們失敗了運行該程序的Windows 2012服務器下的。當我們查看事件日誌時,發現來自System.Security.Cryptography.RijndaelManaged..ctor()
的錯誤(遺憾的是日誌沒有給我們提供完整的路徑)。Rijndael加密技術不能在Windows Server 2012上工作
我已經使用了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()at Common.StringCipher.Decrypt(System.String,System.String)at Common.Conf..cctor()異常信息:在Common.Conf.get_DataProvider() 在Postbag.FormMain..ctor()在Postbag.Program.Main( System.TypeInitializationException)
新的服務器也有.NET Framework的版本相同。
既然你沒有改變塊的大小,你應該用'Aes.Create()'替換'new RijndaelManaged()'。它會產生相同的輸出,但不會產生FIPS異常。 – bartonjs