.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()
解决方法
建议的作方法是将对现已过时的 API 的调用替换为对特定算法的工厂方法的调用,例如 Aes.Create()。 这可让你完全控制实例化哪些算法。
如果需要保持与使用现已过时 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>
有关详细信息,请参阅 禁止显示警告。