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

開發人員有四種方式可使用 Windows SDK 來建立加密物件:

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

  • 透過在該演算法的抽象類別上呼叫 Create 方法,以建立實作特定加密演算法的物件。

  • 透過呼叫 CryptoConfig.CreateFromName 方法以建立實作特定加密演算法的物件。

  • 透過針對該類型的演算法 (例如 SymmetricAlgorithm) 呼叫 Create 方法,以建立實作加密演算法 (例如對稱區塊編碼器) 類別的物件。

例如,假設開發人員想要計算一組位元組的 SHA1 雜湊。 System.Security.Cryptography 命名空間包含 SHA1 演算法的兩個實作,一個是純受控實作,而另一個會包裝 CryptoAPI。 開發人員可以透過呼叫 newSHA1Managed 運算子,以選擇將特定 SHA1 實作 (例如 ) 具現化。 不過,如果通用語言執行平台載入哪個類別不重要,只要類別實作 SHA1 雜湊演算法,開發人員就可以透過呼叫 SHA1.Create 方法來建立物件。 此方法會呼叫 System.Security.Cryptography.CryptoConfig.CreateFromName("System.Security.Cryptography.SHA1"),其必須傳回 SHA1 的實作。

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

如果使用哪一個雜湊演算法不重要,開發人員可以呼叫 HashAlgorithm.Create 方法,其會傳回實作雜湊轉換的物件。

在設定檔中對應演算法名稱

根據預設,執行階段會針對全部四個案例傳回 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> 元素中屬性的值為通用語言執行平台 (CLR) 用來尋找類別的字串。 您使用的字串必須符合指定完整的類型名稱 (部分機器翻譯) 中指定的需求。

許多演算法名稱可以對應至相同的類別。 <nameEntry> 元素 (部分機器翻譯) 會將類別對應至易記演算法名稱。 name 屬性可以是呼叫 System.Security.Cryptography.CryptoConfig.CreateFromName 方法時所使用的字串,或是 System.Security.Cryptography (部分機器翻譯) 命名空間中抽象加密類別的名稱。 class 屬性的值是 <cryptoClass> 元素中屬性的名稱。

注意

您可以透過呼叫 SHA1.CreateSecurity.CryptoConfig.CreateFromName("SHA1") 方法來取得 SHA1 演算法。 每個方法都僅保證會傳回實作 SHA1 演算法的物件。 您不需要將演算法的每個易記名稱對應至設定檔中的相同類別。

如需預設名稱以及其對應的類別清單,請參閱 CryptoConfig (部分機器翻譯)。

另請參閱