SYSLIB0007:不支持加密算法的默认实现
.NET Framework 中的加密配置系统不允许适当的加密灵活性,且不存在于 .NET Core 和 .NET 5+ 中。 .NET 的后向兼容性要求也禁止框架更新某些加密 API 以跟上加密技术的发展。 因此从 .NET 5 开始,以下 API 标记为已过时。 使用这些 API 会在编译时生成警告 SYSLIB0007
,并在运行时生成 PlatformNotSupportedException。
- System.Security.Cryptography.AsymmetricAlgorithm.Create()
- System.Security.Cryptography.HashAlgorithm.Create()
- System.Security.Cryptography.HMAC.Create()
- System.Security.Cryptography.KeyedHashAlgorithm.Create()
- System.Security.Cryptography.SymmetricAlgorithm.Create()
解决方法
建议采取的操作是用对特定算法(例如 Aes.Create())的工厂方法的调用替换对现已过时的 API 的调用。 这样,便可以完全控制要实例化哪些算法。
如果需要保持与使用现已过时的 API 的 .NET Framework 应用生成的现有有效负载的兼容性,请使用下表中建议的替换项。 该表提供了从 .NET Framework 默认算法到其 .NET 5+ 等效项的映射。
.NET framework .NET Core/.NET 5 及更高版本的兼容替换项 备注 AsymmetricAlgorithm.Create() RSA.Create() HashAlgorithm.Create() SHA1.Create() SHA-1 算法被认为已无效。 如果可能,请考虑使用更强大的算法。 请咨询安全顾问以获取进一步的指导。 HMAC.Create() HMACSHA1() 对于大多数新式应用程序,不建议使用 HMACSHA1 算法。 如果可能,请考虑使用更强大的算法。 请咨询安全顾问以获取进一步的指导。 KeyedHashAlgorithm.Create() HMACSHA1() 对于大多数新式应用程序,不建议使用 HMACSHA1 算法。 如果可能,请考虑使用更强大的算法。 请咨询安全顾问以获取进一步的指导。 SymmetricAlgorithm.Create() Aes.Create()
抑制警告
如果必须使用已过时的 API,可在代码或项目文件中禁止显示警告。
若只想抑制单个冲突,请将预处理器指令添加到源文件以禁用该规则,然后重新启用警告。
// Disable the warning.
#pragma warning disable SYSLIB0007
// Code that uses obsolete API.
// ...
// Re-enable the warning.
#pragma warning restore SYSLIB0007
若要禁止显示项目中的所有 SYSLIB0007
警告,请将属性 <NoWarn>
添加到项目文件。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
...
<NoWarn>$(NoWarn);SYSLIB0007</NoWarn>
</PropertyGroup>
</Project>
有关详细信息,请参阅取消警告。