各位,谁能帮我解决,困扰几天了,程序一直过不了。
System.TypelnitializationException:“AESKey"的类型初始值设走项引发异常。--->System.InvalidOperationException: 此实现不是 Windows 平台FIPS 验证的加密算法的一部分。

各位,谁能帮我解决,困扰几天了,程序一直过不了。
System.TypelnitializationException:“AESKey"的类型初始值设走项引发异常。--->System.InvalidOperationException: 此实现不是 Windows 平台FIPS 验证的加密算法的一部分。

上午好☀️☀️☀️️
本答案参考通义千问
你遇到的错误信息是:
System.TypelnitializationException:“AESKey"的类型初始值设走项引发异常。--->System.InvalidOperationException: 此实现不是 Windows 平台FIPS 验证的加密算法的一部分。
这个错误通常出现在使用 .NET 框架进行加密操作时,尤其是在启用了 FIPS(Federal Information Processing Standard) 验证的系统上。以下是详细的解释和解决方案。
Windows 系统中如果启用了 FIPS 验证,那么所有加密操作必须使用符合 FIPS 标准的算法。而默认的 AesManaged 类可能不被 FIPS 认可,因此会抛出异常。
.NET 中的 AesManaged 实现虽然功能正常,但没有通过 FIPS 验证,因此在启用了 FIPS 的系统中无法使用。
⚠️ 注意:生产环境中不建议关闭 FIPS 验证,这可能会导致安全合规性问题。
regedit)。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
FIPSAlgorithmPolicy。0(表示禁用 FIPS 验证)。注意: 这种方式适用于开发或测试环境,不建议用于生产环境。
你可以使用 AesCryptoServiceProvider 替代 AesManaged,因为它是基于 Windows CryptoAPI 的实现,通常通过 FIPS 验证。
using System;
using System.IO;
using System.Security.Cryptography;
public class AesEncryption
{
public static byte[] Encrypt(byte[] plainText, byte[] key, byte[] iv)
{
using (AesCryptoServiceProvider aes = new AesCryptoServiceProvider())
{
aes.Key = key;
aes.IV = iv;
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
ICryptoTransform encryptor = aes.CreateEncryptor(aes.Key, aes.IV);
using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write))
{
cs.Write(plainText, 0, plainText.Length);
}
return ms.ToArray();
}
}
}
public static byte[] Decrypt(byte[] cipherText, byte[] key, byte[] iv)
{
using (AesCryptoServiceProvider aes = new AesCryptoServiceProvider())
{
aes.Key = key;
aes.IV = iv;
aes.Mode = CipherMode.CBC;
aes.Padding = PaddingMode.PKCS7;
ICryptoTransform decryptor = aes.CreateDecryptor(aes.Key, aes.IV);
using (MemoryStream ms = new MemoryStream(cipherText))
{
using (CryptoStream cs = new CryptoStream(ms, decryptor, CryptoStreamMode.Read))
{
byte[] result = new byte[cipherText.Length];
int bytesRead = cs.Read(result, 0, result.Length);
Array.Resize(ref result, bytesRead);
return result;
}
}
}
}
}
重点说明:
- 使用
AesCryptoServiceProvider而不是AesManaged。- 在 FIPS 启用的系统中,这种实现通常是符合 FIPS 标准的。
如果你使用的是 .NET Core 或 .NET 5+,可以尝试在 appsettings.json 或 launchSettings.json 中添加以下配置:
{
"RuntimeOptions": {
"Configuration": "Release",
"Framework": {
"Name": "Microsoft.NETCore.App",
"Version": "3.1.0"
},
"ApplicationArguments": "--no-fips"
}
}
注意: 该选项可能因 .NET 版本不同而有所变化,需根据具体版本查阅官方文档。
| 问题 | 解决方案 |
|------|----------|
| FIPS 验证启用导致 AES 报错 | 禁用 FIPS(仅限开发环境) |
| 使用非 FIPS 兼容的 AES 实现 | 替换为 AesCryptoServiceProvider |
| .NET Core/5+ 中的 FIPS 问题 | 检查运行时配置并调整 |
如果你能提供你的代码片段,我可以帮你更准确地定位问题并给出修改后的代码。欢迎继续提问!