將演算法名稱對應至密碼編譯類別

開發人員有四種使用 Windows Software Development Kit (SDK) 建立密碼編譯物件的方式:

  • 使用 new 運算子建立物件。

  • 呼叫特定密碼編譯演算法抽象類別 (Abstract Class) 上的 Create 方法,來建立實作該演算法的物件。

  • 呼叫 System.Security.Cryptography.CryptoConfig.CreateFromName 方法,建立實作特定密碼編譯演算法的物件。

  • 呼叫密碼編譯演算法 (例如 SymmetricAlgorithm) 抽象類別上的 Create 方法,建立實作該類型演算法 (例如 Symmetric Block Cipher) 類別的物件。

例如,假設開發人員想要計算一組位元組的 SHA1 雜湊。 System.Security.Cryptography 命名空間包含 SHA1 演算法的兩個實作,一個為純粹的 Managed 實作,而一個則包裝 CryptoAPI。 開發人員可以呼叫 new 運算子,選擇要具現化特定 SHA1 實作 (例如 SHA1Managed 類別)。 然而,如果只要類別實作 SHA1 雜湊演算法,Common Language Runtime 將載入哪個類別即無關緊要的話,開發人員可以呼叫 System.Security.Cryptography.SHA1.Create 方法建立物件。 這個方法會呼叫必須傳回 SHA1 雜湊演算法實作的 System.Security.Cryptography.CryptoConfig.CreateFromName("System.Security.Cryptography.SHA1")

開發人員也可以呼叫 System.Security.Cryptography.CryptoConfig.CreateFromName("SHA1"),因為在預設情況中,加密組態包含 .NET Framework 中隨附的演算法的簡短名稱。

如果使用哪個雜湊演算法無關緊要的話,開發人員就可以呼叫 System.Security.Cryptography.HashAlgorithm.Create 方法,傳回實作雜湊轉換的物件。

在組態檔中對應演算法名稱

預設的情況下,執行階段對所有四個案例都會傳回 System.Security.Cryptography.SHA1CryptoServiceProvider 類別物件。 然而,電腦系統管員可以變更最後兩個案例中的方法所傳回物件的型別。 若要這麼做,您必須對應易記的演算法名稱至您想要在電腦組態檔 (Machine.config) 中使用的類別。

下列範例將示範如何設定執行階段,使得 System.Security.Cryptography.SHA1.CreateSystem.Security.CryptoConfig.CreateFromName("SHA1")System.Security.Cryptography.HashAlgorithm.Create 會傳回 MySHA1HashClass 物件。

<configuration>
   <!-- Other configuration settings. -->
   <mscorlib>
      <cryptographySettings>
         <cryptoNameMapping>
            <cryptoClasses>
               <cryptoClass MySHA1Hash="MySHA1HashClass, MyAssembly
                  Culture='en', PublicKeyToken=a5d015c7d5a0b012,
                  Version=1.0.0.0"/>
            </cryptoClasses>
            <nameEntry name="SHA1" class="MySHA1Hash"/>
            <nameEntry name="System.Security.Cryptography.SHA1"
                       class="MySHA1Hash"/>
            <nameEntry name="System.Security.Cryptography.HashAlgorithm"
                       class="MySHA1Hash"/>
         </cryptoNameMapping>
      </cryptographySettings>
   </mscorlib>
</configuration>

您可以在 <cryptoClass> 項目中指定屬性名稱 (之前的範例將此屬性命名為 MySHA1Hash)。 <cryptoClass> 項目中屬性的值為 Common Language Runtime 用來尋找類別的字串。 您可以使用符合指定完整的型別名稱中指定的要求的任一字串。

許多演算法名稱可以對應至相同類別。 <nameEntry> 項目對應類別至一個易記的演算法名稱。 name 屬性可以是呼叫 System.Security.Cryptography.CryptoConfig.CreateFromName 方法時使用的字串,或者是 System.Security.Cryptography 命名空間中的抽象密碼編譯類別名稱。 class 屬性的值是 <cryptoClass> 項目中屬性的名稱。

注意事項注意事項

您可以藉由呼叫 System.Security.Cryptography.SHA1.CreateSecurity.CryptoConfig.CreateFromName("SHA1") 方法來取得 SHA1 演算法。各個方法只保證它會傳回實作 SHA1 演算法的物件。您不必對應演算法的每一個易記名稱至組態檔中的相同類別。

如需預設名稱和它們對應到的類別的清單,請參閱 CryptoConfig 類別

請參閱

概念

密碼編譯服務

其他資源

設定密碼編譯類別