共用方式為


SYSLIB0007:不支援的密碼演算法預設實作

.NET Framework 中的密碼學配置系統不允許適當的密碼學敏捷性,且 .NET Core 和 .NET 5+ 中沒有。 .NET的向下相容性要求也禁止該框架更新某些密碼學API,以跟上密碼學的進步。 因此,以下 API 從 .NET 5 起被標記為過時。 使用這些 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>

如需詳細資訊,請參閱隱藏警告

另請參閱