將演算法名稱對應至密碼編譯類別
注意
本文專屬於 .NET Framework。 其不適用於較新的 .NET 實作,包括 .NET 6 和更新版本。
開發人員有四種方式可使用 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.Create、System.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.Create 或 Security.CryptoConfig.CreateFromName("SHA1") 方法來取得 SHA1 演算法。 每個方法都僅保證會傳回實作 SHA1 演算法的物件。 您不需要將演算法的每個易記名稱對應至設定檔中的相同類別。
如需預設名稱以及其對應的類別清單,請參閱 CryptoConfig (部分機器翻譯)。