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

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

解决方法

  • 建议采取的操作是用对特定算法(例如 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>

有关详细信息,请参阅取消警告

另请参阅