SYSLIB0007:不支援密碼編譯演算法的預設實作
.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()
因應措施
建議的動作是,以特定演算法的 Factory 方法呼叫,取代已淘汰 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>
如需詳細資訊,請參閱隱藏警告。