.NET Framework 中的密碼學配置系統不允許適當的密碼學敏捷性,且 .NET Core 和 .NET 5+ 中沒有。 .NET的向下相容性要求也禁止該框架更新某些密碼學API,以跟上密碼學的進步。 因此,以下 API 從 .NET 5 起被標記為過時。 使用這些 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()
因應措施
建議的做法是將對已過時 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>
如需詳細資訊,請參閱隱藏警告。