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

.NET Framework 中的加密配置系统不允许适当的加密敏捷性,在 .NET Core 和 .NET 5+ 中不存在。 .NET 的向后兼容性要求还禁止框架更新某些加密 API,以跟上加密方面的进展。 因此,从 .NET 5 开始,以下 API 标记为已过时。 使用这些 API 会在编译时和SYSLIB0007运行时生成警告PlatformNotSupportedException

解决方法

  • 建议的作方法是将对现已过时的 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>

有关详细信息,请参阅 禁止显示警告

另请参阅