.NET Framework (最新版本到.NET Framework 4.7.2)中的新增功能

風靈使發表於2019-01-14

.NET Framework 4.7.2.NET Framework 4.x 早期版本的基礎之上構建而成,新增了許多修補程式和功能,同時很好地保持了產品的穩定性。

可以通過安裝 .NET Framework 4.7.2 開發人員工具包,在 Visual Studio 2012 或更高版本中定位 .NET Framework 4.7.2

.NET Framework 4.7.2 中的新增功能

.NET Framework 4.7.2 在以下幾個領域新增了功能:

    核心
    ASP.NET 2.0
    網路連線
    SQL
    WPF
    ClickOnce

.NET Framework 4.7.2 持續關注的重點是輔助功能的改進,使應用程式能為輔助技術的使用者提供最佳體驗。 有關 .NET Framework 4.7.2 中輔助功能改進的資訊,請參閱 .NET Framework 中輔助功能的新增功能。

核心

.NET Framework 4.7.2 提供大量的加密增強功能、對 ZIP 存檔更好的解壓縮支援以及額外的集合 API。

RSA.CreateDSA.Create 的新過載

利用 DSA.Create(DSAParameters)RSA.Create(RSAParameters) 方法,可在例項化新的 DSARSA 金鑰時提供金鑰引數。 它們允許你替換如下所示的程式碼:

//在.NET Framework 4.7.2之前
using (RSA rsa = RSA.Create())
{
   rsa.ImportParameters(rsaParameters);
   //使用RSA例項執行的其他程式碼
}

採用類似如下所示的程式碼:

//從.NET Framework 4.7.2開始
using (RSA rsa = RSA.Create(rsaParameters))
{
   //使用rsa例項執行的其他程式碼
}

DSA.Create(Int32)RSA.Create(Int32) 方法允許生成具有特定金鑰大小的 DSARSA 金鑰。 例如:

using (DSA dsa = DSA.Create(2048))
{
   // Other code to execute using the dsa instance.
}

Rfc2898DeriveBytes 建構函式接受雜湊演算法名稱

Rfc2898DeriveBytes 類具有三個帶 HashAlgorithmName 引數的建構函式,該引數標識在派生金鑰時使用的 HMAC 演算法。 與 SHA-1 相比,開發人員應使用基於 SHA-2HMAC,例如 SHA-256,如下面的示例所示:

private static byte[] DeriveKey(string password, out int iterations, out byte[] salt,
                                out HashAlgorithmName algorithm)
{
   iterations = 100000;
   algorithm = HashAlgorithmName.SHA256;

   const int SaltSize = 32;
   const int DerivedValueSize = 32;

   using (Rfc2898DeriveBytes pbkdf2 = new Rfc2898DeriveBytes(password, SaltSize,
                                                             iterations, algorithm))
   {
      salt = pbkdf2.Salt;
      return pbkdf2.GetBytes(DerivedValueSize);
   }
}

臨時金鑰支援

PFX 匯入可以選擇繞過硬碟直接從記憶體載入私鑰。 如果在 X509Certificate2 建構函式或 X509Certificate2.Import 方法的其中一個過載中指定了新的 X509KeyStorageFlags.EphemeralKeySet 標記,則私鑰將載入為臨時金鑰。 這能防止金鑰在磁碟上可見。 但是:

  • 由於金鑰不會保留到磁碟,最好不要將通過此標記載入的證書新增到 X509Store
  • 以這種方式載入的金鑰大多都是通過 Windows CNG 載入的。 因此,呼叫方必須通過呼叫擴充套件方法訪問私鑰,例如
    cert.GetRSAPrivateKey()X509Certificate2.PrivateKey 屬性不起作用。
  • 由於舊的 X509Certificate2.PrivateKey 屬性對證書不起作用,開發人員應在切換至臨時金鑰之前執行嚴密的測試。

PKCS#10證書籤名請求和X.509公鑰證書的程式設計式建立

.NET Framework 4.7.2 開始,工作負載可以生成證書籤名請求 (CSR),這允許將證書請求生成分階到現有工具中。 這在測試方案中常常很有用。

有關詳細資訊和程式碼示例,請參閱 .NET 部落格中的“PKCS#10 證書籤名請求和 X.509 公鑰證書的程式設計式建立”。

新的 SignerInfo 成員

.NET Framework 4.7.2 開始,SignerInfo 類將公開更多有關簽名的資訊。 你可以檢索 System.Security.Cryptography.Pkcs.SignerInfo.SignatureAlgorithm 屬性的值,以確定簽名者採用的簽名演算法。 可以呼叫 SignerInfo.GetSignature 來獲取此簽名者的加密簽名副本。

CryptoStream 釋放後保持包裝流開啟

.NET Framework 4.7.2 開始,CryptoStream 類有了一個額外的建構函式可允許 Dispose 不關閉包裝流。 若要在釋放 CryptoStream 例項後保持包裝流的開啟狀態,請呼叫新的 CryptoStream 建構函式,如下所示:

var cStream = new CryptoStream(stream, transform, mode, leaveOpen: true);

DeflateStream 中的解壓縮更改

.NET Framework 4.7.2 開始,DeflateStream 類中的解壓縮操作的實現變為預設使用本機 Windows API。 這樣通常能大大地提高效能。

對於面向 .NET Framework 4.7.2 的應用程式,預設啟用通過使用 Windows API 進行解壓縮的支援。 對於面向舊版 .NET Framework 但在 .NET Framework 4.7.2 下執行的應用程式,可以將以下 AppContext 開關新增到應用程式配置檔案,從而選擇啟用此行為:

額外的集合 API

.NET Framework 4.7.2 將一些新 API 新增到 SortedSet<T>HashSet<T> 型別。 這些方法包括:

  • TryGetValue 方法,將其他集合型別中使用的嘗試模式擴充套件到了這兩種型別中。 這兩個方法是:

    • public bool HashSet.TryGetValue(T equalValue, out T actualValue)
    • public bool SortedSet.TryGetValue(T equalValue, out T actualValue)
  • Enumerable.To* 擴充套件方法,將集合轉換為 HashSet<T>

    • public static HashSet ToHashSet(this IEnumerable source)
    • public static HashSet ToHashSet(this IEnumerable source, IEqualityComparer comparer)
  • 新的 HashSet<T> 建構函式,讓你設定集合容量,可以在提前知道 HashSet<T> 大小的情況下提升效能:

    • public HashSet(int capacity)
    • public HashSet(int capacity, IEqualityComparer comparer)

ConcurrentDictionary<TKey,TValue> 類包含 AddOrUpdateGetOrAdd 方法的新過載,以便在詞典中檢索值或新增找不到的值,以及將值新增到詞典或者更新已存在的值。

public TValue AddOrUpdate<TArg>(TKey key, Func<TKey, TArg, TValue> addValueFactory, Func<TKey, TValue, TArg, TValue> updateValueFactory, TArg factoryArgument)

public TValue GetOrAdd<TArg>(TKey key, Func<TKey, TArg, TValue> valueFactory, TArg factoryArgument)

Web 窗體中的依賴項注入支援

依賴項注入 (DI) 分離物件和它們的依賴項,使得物件的程式碼不再僅因依賴項更改而需要進行更改。 在開發面向 .NET Framework 4.7.2ASP.NET 應用程式時,可以:

  • 在處理程式和模組、頁面例項和 ASP.NET Web 應用程式專案的使用者控制元件中使用基於資源庫、基於介面和基於建構函式的注入。
  • 在處理程式和模組、頁面例項和 ASP.NET 網站專案的使用者控制元件中使用基於資源庫和基於介面的注入。
  • 插入不同的依賴關係注入框架。

同站點 cookie 支援

SameSite 防止瀏覽器將 cookie 和跨站點請求一起傳送。 .NET Framework 4.7.2 新增了一個值為 System.Web.SameSiteMode 列舉成員的 HttpCookie.SameSite 屬性。 如果它的值為 SameSiteMode.StrictSameSiteMode.LaxASP.NETSameSite 屬性新增到 set-cookie 標頭。 SameSite 支援適用於 HttpCookie 物件,以及 FormsAuthenticationSystem.Web.SessionState cookie

可以為 HttpCookie 物件設定 SameSite,如下所示:

var c = new HttpCookie("secureCookie", "same origin");
c.SameSite = SameSiteMode.Lax;

還可以通過修改 web.config 檔案,在應用程式級別配置 SameSite cookie

<system.web>
   <httpCookies sameSite="Strict" />
</system.web>

通過修改 Web 配置檔案,可以為 FormsAuthenticationSystem.Web.SessionState cookie 新增 SameSite

<system.web>
   <authentication mode="Forms">
      <forms cookieSameSite="Lax">
         <!-- ...   -->
      </forms>
   <authentication />
   <sessionSate cookieSameSite="Lax"></sessionState>
</system.web>

網路

HttpClientHandler 屬性的實現

.NET Framework 4.7.1 將八個屬性新增到了 System.Net.Http.HttpClientHandler 類。 不過其中有兩個會引發 PlatformNotSupportedException.NET Framework 4.7.2 現在為這些屬性提供實現。 這些屬性為:

  • CheckCertificateRevocationList
  • SslProtocols

SQLClient

Azure Active Directory 通用身份驗證和多重身份驗證的支援

不斷增加的符合性和安全性需求讓很多客戶需要使用多重身份驗證 (MFA)。 此外,當前的最佳做法不鼓勵在連線字串中直接包含使用者密碼。 為了支援這些更改,.NET Framework 4.7.2 通過新增新值“Active Directory Interactive”擴充套件了 SQLClient 連線字串,讓現有“身份驗證”關鍵字支援 MFA 和 Azure AD 身份驗證。 新的互動式方法支援本機和聯合 Azure AD 使用者以及 Azure AD 來賓使用者。 使用此方法時,SQL 資料庫將支援由 Azure AD 施加的 MFA 身份驗證。 此外,為了遵循安全最佳做法,身份驗證流程會請求使用者密碼。

在以前版本的 .NET Framework 中,SQL 連線只支援 SqlAuthenticationMethod.ActiveDirectoryPasswordSqlAuthenticationMethod.ActiveDirectoryIntegrated 選項。 兩者都是非互動式 ADAL 協議的一部分,而該協議不支援 MFA。 利用新的 SqlAuthenticationMethod.ActiveDirectoryInteractive 選項,SQL 連線可支援 MFA 以及現有身份驗證方法(密碼和整合身份驗證),讓使用者可以互動式地輸入使用者密碼,而無需將密碼存留在連線字串中。

有關詳細資訊和示例,請參閱 .NET 部落格中的“SQL - Azure AD 通用和多重身份驗證支援”。

Always Encrypted 版本 2 的支援

NET Framework 4.7.2 為基於 enclaveAlways Encrypted 新增支援。 Always Encrypted 的原始版本是客戶端加密技術,其中的加密金鑰不會離開客戶端。 在基於 enclaveAlways Encrypted 中,客戶端可以選擇將加密金鑰傳送到安全的 enclave,即一個安全的計算實體,該實體可以看作是 SQL Server 的一部分,但 SQL Server 程式碼無法對其進行篡改。 為了支援基於 enclaveAlways EncryptedNET Framework 4.7.2 將以下型別和成員新增到 System.Data.SqlClient 名稱空間:

  • SqlConnectionStringBuilder.EnclaveAttestationUrl,為基於 enclaveAlways Encrypted 指定 URI。
  • SqlColumnEncryptionEnclaveProvider,一個抽象類,所有 enclave 提供程式都自它派生。
  • SqlEnclaveSession,封裝給定 enclave 會話的狀態。
  • SqlEnclaveAttestationParameters,提供 SQL Server 所使用的認證引數,以獲取執行特定認證協議所需的資訊。

抽象 System.Data.SqlClient.SqlColumnEncryptionEnclaveProvider 類提供了 enclave 提供程式的功能,應用程式配置檔案隨後會指定該類的具體實現。 例如:

<configuration>
  <configSections>
    <section name="SqlColumnEncryptionEnclaveProviders" type="System.Data.SqlClient.SqlColumnEncryptionEnclaveProviderConfigurationSection,System.Data,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089"/> 
  </configSections>
  <SqlColumnEncryptionEnclaveProviders>
    <providers>
      <add name="Azure" type="Microsoft.SqlServer.Management.AlwaysEncrypted.AzureEnclaveProvider,MyApp"/>
      <add name="HGS" type="Microsoft.SqlServer.Management.AlwaysEncrypted.HGSEnclaveProvider,MyApp" />
    </providers>
  </SqlColumnEncryptionEnclaveProviders >
</configuration>

基於 enclaveAlways Encrypted 的基本流是:

  1. 使用者建立與 SQL Server(支援基於 enclave 的 Always Encrypted)的 AlwaysEncrypted 連線。 驅動程式聯絡認證服務以確保它連線到正確的 enclave。
  2. enclave 驗證成功後,驅動程式將建立與託管在 SQL Server 上的安全 enclave 之間的安全通道。
  3. 在 SQL 連線期間,驅動程式與安全 enclave 共享由客戶端授權的加密金鑰。

Windows Presentation Foundation

按源查詢 ResourceDictionaries

.NET Framework 4.7.2 開始,診斷助手可以找到從給定源 URI 建立的 ResourceDictionaries。 (此功能通過診斷助手使用,而非生產應用程式。)診斷助手(例如 Visual Studio 的“編輯並繼續”)讓使用者可以編輯 ResourceDictionary 以將更改應用到正在執行的應用程式。 要實現這一點,其中一個步驟是從被編輯的字典中找到正在執行的應用程式建立的所有 ResourceDictionaries。 例如,應用程式可以宣告某個從給定源 URI 複製內容的 ResourceDictionary

<ResourceDictionary Source="MyRD.xaml">

編輯 MyRD.xaml 中的原始標記的診斷助手可以使用新功能來找到字典。 此功能通過新的靜態方法 ResourceDictionaryDiagnostics.GetResourceDictionariesForSource 實現。 診斷助手使用標識原始標記的絕對 URI 呼叫新方法,如以下程式碼所示:

IEnumerable<ResourceDictionary> dictionaries = ResourceDictionaryDiagnostics.GetResourceDictionariesForSource(new Uri("pack://application:,,,/MyApp;component/MyRD.xaml"));

該方法返回空的列舉值,除非啟用了 VisualDiagnostics 並且設定了 ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO 環境變數。

查詢 ResourceDictionary 所有者

.NET Framework 4.7.2 開始,診斷助手可以找到給定 ResourceDictionary 的所有者。 (此功能供診斷助手,而非生產應用程式使用。)每當對 ResourceDictionary 做出更改時,WPF 會自動查詢所有可能會受此更改影響的 DynamicResource 引用。

診斷助手(例如 Visual Studio 的“編輯並繼續”)可能想對此進行擴充套件以處理 StaticResource 引用。 此過程的第一步是找到字典的所有者,也就是找到其 Resources 屬性引用該字典(不管是直接引用,還是通過 ResourceDictionary.MergedDictionaries 屬性間接引用)的所有物件。 System.Windows.Diagnostics.ResourceDictionaryDiagnostics 類上實現的三個新的靜態方法(每個對應具有 Resources 屬性的基型別)支援此步驟:

    public static IEnumerable<FrameworkElement> GetFrameworkElementOwners(ResourceDictionary dictionary);

    public static IEnumerable<FrameworkContentElement> GetFrameworkContentElementOwners(ResourceDictionary dictionary);

    public static IEnumerable<Application> GetApplicationOwners(ResourceDictionary dictionary);

這些方法返回空的列舉值,除非啟用了 VisualDiagnostics 並且設定了 ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO 環境變數。

查詢 StaticResource 引用

現在,每當一個 StaticResource 引用被解析時,診斷助手都能收到通知。 (此功能供診斷助手,而非生產應用程式使用。)診斷助手(例如 Visual Studio 的“編輯並繼續”)可能想在 ResourceDictionary 中某個資源的值發生更改時更新該資源的所有使用。 WPF 為 DynamicResource 引用自動完成此操作,但不會為 StaticResource 引用有意執行該操作。 從 .NET Framework 4.7.2 開始,診斷助手可以利用這些通知來查詢靜態資源的使用情況。

該通知由新的 ResourceDictionaryDiagnostics.StaticResourceResolved 事件實現:

public static event EventHandler<StaticResourceResolvedEventArgs> StaticResourceResolved;

每當執行時解析 StaticResource 引用時,都會引發此事件。 StaticResourceResolvedEventArgs 引數描述解析,並指示託管 StaticResource 引用的物件和屬性及用於解析的 ResourceDictionary 和金鑰:

public class StaticResourceResolvedEventArgs : EventArgs
{
   public Object TargetObject { get; }

   public Object TargetProperty { get; }

   public ResourceDictionary ResourceDictionary { get; }

   public object ResourceKey { get; }
}

除非啟用 VisualDiagnostics 並設定了 ENABLE_XAML_DIAGNOSTICS_SOURCE_INFO 環境變數,否則不會引發該事件(且忽略它的 add 訪問器)。

ClickOnce

Windows 窗體的 HDPI 感知應用程式、Windows Presentation Foundation (WPF) 以及 Visual Studio Tools for Office (VSTO) 都可以通過使用 ClickOnce 進行部署。 如果在應用程式清單中找到了以下條目,則部署將在 .NET Framework 4.7.2 下成功執行:

<windowsSettings>
   <dpiAware xmlns="http://schemas.microsoft.com/SMI/2005/WindowsSettings">true</dpiAware>
</windowsSettings>

對於 Windows 窗體應用程式,不需要像以前那樣在應用程式配置檔案(而非應用程式清單)中設定 DPI 感知就可以成功完成 ClickOnce 部署。

.NET Framework 4.7.1 中的新增功能

.NET Framework 4.7.1 在以下幾個領域新增了功能:

    核心
    公共語言執行時 (CLR)
    網路連線
    ASP.NET 2.0

此外,.NET Framework 4.7.1 的重點是改進了輔助功能,使應用程式能為輔助技術的使用者提供最佳體驗。 有關 .NET Framework 4.7.1 中輔助功能改進的資訊,請參閱 .NET Framework 中輔助功能的新增功能。

核心

支援 .NET Standard 2.0

.NET Standard 定義一組 API,這些 API 必須可用於支援 Standard 版本的每個 .NET 實現。 .NET Framework 4.7.1 完全支援 .NET Standard 2.0 並增加了 200 個 API,這些 API 在 .NET Standard 2.0 中定義,.NET Framework 4.6.1、4.6.24.7 中也延續使用。 (請注意,這些版本的 .NET Framework 只有在其他 .NET Standard 支援檔案也部署在目標系統時才支援 .NET Standard 2.0。)有關詳細資訊,請參閱 .NET Framework 4.7.1 Runtime and Compiler Features(.NET Framework 4.7.1 執行時和編譯器功能)部落格文章中的“BCL - .NET Standard 2.0 Support”(BCL - .NET Standard 2.0 支援)。

支援配置生成器

配置生成器允許開發者在執行時動態地插入和生成應用程式的配置設定。 自定義配置生成器可用於修改配置節中的現有資料,也可用於生成全新的配置節。 如果沒有配置生成器,.config 檔案將是靜態的,並且其設定將在應用程式啟動之前定義。

若要建立自定義配置生成器,請從抽象的 ConfigurationBuilder 類派生生成器並且替代其 ConfigurationBuilder.ProcessConfigurationSectionConfigurationBuilder.ProcessRawXml。 也可在 .config 檔案中定義生成器。 有關詳細資訊,請參閱 .NET Framework 4.7.1 ASP.NET and Configuration Features(.NET Framework 4.7.1 ASP.NET 和配置功能)部落格文章中的“Configuration Builders”(配置生成器)一節。

執行時功能檢測

System.Runtime.CompilerServices.RuntimeFeature 類提供一種機制,用於確定給定的 .NET 實現在編譯時或執行時是否支援預定義的功能。 在編譯時,編譯器可以檢查指定的欄位是否存在,以確定是否支援某項功能,如果支援,它會發出利用這一功能的程式碼。 在執行時,應用程式可以在執行時發出程式碼之前呼叫 RuntimeFeature.IsSupported 方法。 有關詳細資訊,請參閱 Add helper method to describe features supported by the runtime(新增 helper 方法以描述執行時支援的功能)。

值元組型別是可序列化的

.NET Framework 4.7.1 起,System.ValueTuple 及其相關的泛型型別被標記為可序列化,允許進行二進位制序列化。 這樣,可以更輕鬆地將元組型別(如 Tuple<T1,T2,T3>Tuple<T1,T2,T3,T4>)遷移到值元組型別。 有關詳細資訊,請參閱 .NET Framework 4.7.1 Runtime and Compiler Features(.NET Framework 4.7.1 執行時和編譯器功能)部落格文章中的“Compiler – ValueTuple is Serializable”(編譯器 – 值元組是可序列化的)。

支援只讀引用

.NET Framework 4.7.1 增加了 System.Runtime.CompilerServices.IsReadOnlyAttribute。 此特性由語言編譯器用於標記具有隻讀 ref 返回型別或引數的成員。 有關詳細資訊,請參閱 .NET Framework 4.7.1 Runtime and Compiler Features(.NET Framework 4.7.1 執行時和編譯器功能)部落格文章中的“Compiler -- Support for ReadOnlyReferences”(編譯器 – 支援只讀引用)。 有關 ref 返回值的資訊,請參閱 ref 返回值和 ref 區域性變數(C# 指南)和 ref 返回值 (Visual Basic)。

公共語言執行時 (CLR)

垃圾回收效能改進

.NET Framework 4.7.1 中的垃圾回收 (GC) 的更改提升了整體效能,尤其是大型物件堆 (LOH) 分配的效能。 在 .NET Framework 4.7.1 中,小型物件堆 (SOH) 分配和 LOH 分配使用不同的鎖,當後臺 GC (BGC) 整理 SOH 時即發生 LOH 分配。 這樣,進行大量 LOH 分配的應用程式發生分配鎖爭用的情況將減少,從而提高效能。 有關詳細資訊,請參閱 .NET Framework 4.7.1 Runtime and Compiler Features(.NET Framework 4.7.1 執行時和編譯器功能)部落格文章中的“Runtime -- GC Performance Improvements”(執行時 – GC 效能改進)一節。

網路

Message.HashAlgorithmSHA-2 支援

.NET Framework 4.7 及早期版本中,Message.HashAlgorithm 屬性僅支援 HashAlgorithm.Md5HashAlgorithm.Sha 的值。 從 .NET Framework 4.7.1 開始,還支援 HashAlgorithm.Sha256HashAlgorithm.Sha384HashAlgorithm.Sha512。 實際是否使用此值取決於訊息佇列,因為 Message 例項本身不進行雜湊處理,而是簡單地將值傳遞到訊息佇列。 有關詳細資訊,請參閱 .NET Framework 4.7.1 ASP.NET and Configuration Features(.NET Framework 4.7.1 ASP.NET 和配置功能)部落格文章中的“SHA-2 support for Message.HashAlgorithm”(Message.HashAlgorithm 的 SHA-2 支援)一節。

ASP.NET

ASP.NET 應用程式中的執行步驟

ASP.NET 處理包括 23 個事件的預定義管道中的請求。 ASP.NET 執行每個事件處理程式作為一個執行步驟。 對於 .NET Framework 4.7 之前的 ASP.NET 版本,由於本機和託管執行緒之間的切換,ASP.NET 無法傳送執行上下文。 ASP.NET 有選擇性地僅傳送 HttpContext。 從 .NET Framework 4.7.1 開始,HttpApplication.OnExecuteRequestStep(Action<HttpContextBase,Action>) 方法還允許模組還原環境資料。 此功能針對與跟蹤、分析、診斷或事務(例如應用程式的執行流)相關的庫。 有關詳細資訊,請參閱 .NET Framework 4.7.1 ASP.NET and Configuration Features(.NET Framework 4.7.1 ASP.NET 和配置功能)部落格文章的“ASP.NET Execution Step Feature”(ASP.NET 執行步驟功能)一節。

ASP.NET HttpCookie 分析

.NET Framework 4.7.1 包括新的方法 HttpCookie.TryParse,此方法提供標準化的方式來從字串建立 HttpCookie 物件,並精確分配 cookie 值(如過期日期和路徑)。 有關詳細資訊,請參閱 .NET Framework 4.7.1 ASP.NET and Configuration Features(.NET Framework 4.7.1 ASP.NET 和配置功能)部落格文章中的“ASP.NET HttpCookie parsing”(ASP.NET HttpCookie 分析)一節。

ASP.NET 窗體身份驗證憑據的 SHA-2 雜湊選項

.NET Framework 4.7 及其早期版本中,ASP.NET 允許開發者使用 MD5 或 SHA1 在配置檔案中儲存使用者憑據和雜湊密碼。 從 .NET Framework 4.7.1 開始,ASP.NET 還支援新的安全 SHA-2 雜湊選項(如 SHA256、SHA384 和 SHA512)。 SHA1 保留預設值,非預設雜湊演算法可以在 Web 配置檔案中定義。 例如:
XML

<system.web>
    <authentication mode="Forms">
        <forms loginUrl="~/login.aspx">
          <credentials passwordFormat="SHA512">
            <user name="jdoe" password="6D003E98EA1C7F04ABF8FCB375388907B7F3EE06F278DB966BE960E7CBBD103DF30CA6D61F7E7FD981B2E4E3A64D43C836A4BEDCA165C33B163E6BCDC538A664" />
          </credentials>
        </forms>
    </authentication>
</system.web>

相關文章