SYSLIB0007:不支持加密算法的默认实现

2022-01-05 19:09:42 浏览数 (1)

.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()

禁止显示警告

建议尽可能使用可用的解决方法。 但是,如果无法更改代码,可以通过 #pragma 指令或 <NoWarn> 项目设置来禁止显示警告。 如果必须使用过时 API,并且 SYSLIB0XXX 诊断没有显示为错误,则可以在代码或项目文件中取消该警告。

若要禁止显示代码中的警告,请执行以下操作:

// Disable the warning.

#pragma warning disable SYSLIB0001

// Code that uses obsolete API.

//...

// Re-enable the warning.

#pragma warning restore SYSLIB0001

若要禁止显示项目文件中的警告,请执行以下操作:

<Project Sdk="Microsoft.NET.Sdk">

<PropertyGroup>

<TargetFramework>net5.0</TargetFramework>

<!-- NoWarn below suppresses SYSLIB0001 project-wide -->

<NoWarn>

0 人点赞