Sdílet prostřednictvím


Mapování názvů algoritmů na třídy kryptografie

Poznámka:

Tento článek je specifický pro rozhraní .NET Framework. Nevztahuje se na novější implementace .NET, včetně .NET 6 a novějších verzí.

Vývojář může pomocí sady Windows SDK vytvořit kryptografický objekt čtyřmi způsoby:

  • Vytvořte objekt pomocí operátoru new .

  • Vytvořte objekt, který implementuje konkrétní kryptografický algoritmus voláním Create metody pro abstraktní třídu pro tento algoritmus.

  • Vytvořte objekt, který implementuje konkrétní kryptografický algoritmus voláním CryptoConfig.CreateFromName metody.

  • Vytvořte objekt, který implementuje třídu kryptografických algoritmů (například symetrické blokové šifry) voláním Create metody pro abstraktní třídu pro daný typ algoritmu (například SymmetricAlgorithm).

Předpokládejme například, že vývojář chce vypočítat hodnotu hash SHA1 sady bajtů. V oboru System.Security.Cryptography názvů se nacházejí dvě implementace algoritmu SHA1, jedna výhradně spravovaná implementace a druhá, která používá CryptoAPI. Vývojář se může rozhodnout vytvořit instanci konkrétní implementace SHA1 (například SHA1Managed) voláním operátoru new . Pokud však nezáleží na tom, která třída common language runtime načte, pokud třída implementuje algoritmus hash SHA1, vývojář může vytvořit objekt voláním SHA1.Create metody. Tato metoda volá System.Security.Cryptography.CryptoConfig.CreateFromName("System.Security.Cryptography.SHA1"), která musí vrátit implementaci algoritmu hash SHA1.

Vývojář může také volat System.Security.Cryptography.CryptoConfig.CreateFromName("SHA1") protože ve výchozím nastavení konfigurace kryptografie obsahuje krátké názvy algoritmů odeslaných v rozhraní .NET Framework.

Pokud nezáleží na tom, který hashovací algoritmus se používá, může vývojář volat metodu HashAlgorithm.Create , která vrátí objekt, který implementuje transformaci hash.

Mapování názvů algoritmů v konfiguračních souborech

Modul runtime ve výchozím nastavení vrátí SHA1CryptoServiceProvider objekt pro všechny čtyři scénáře. Správce počítače však může změnit typ objektu, který metody v posledních dvou scénářích vrátí. K tomu je nutné namapovat snadný název algoritmu na třídu, kterou chcete použít v konfiguračním souboru stroje (Machine.config).

Následující příklad ukazuje, jak nakonfigurovat modul runtime tak, aby System.Security.Cryptography.SHA1.Create, System.Security.CryptoConfig.CreateFromName("SHA1") a System.Security.Cryptography.HashAlgorithm.Create vrátil MySHA1HashClass objekt.

<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>

V elementu<cryptoClass> můžete zadat název atributu (předchozí příklad pojmenuje atributMySHA1Hash). Hodnota atributu v elementu <cryptoClass> je řetězec, který modul CLR používá k vyhledání třídy. Můžete použít libovolný řetězec, který splňuje požadavky zadané v zadání plně kvalifikovaných názvů typů.

Mnoho názvů algoritmů se může mapovat na stejnou třídu. Element mapuje třídu<nameEntry> na jeden snadný název algoritmu. Atribut name může být buď řetězec, který se používá při volání System.Security.Cryptography.CryptoConfig.CreateFromName metoda nebo název abstraktní kryptografické třídy v System.Security.Cryptography oboru názvů. Hodnota atributu class je název atributu v elementu <cryptoClass> .

Poznámka:

Algoritmus SHA1 můžete získat voláním SHA1.Create metody Security.CryptoConfig.CreateFromName("SHA1"). Každá metoda zaručuje pouze to, že vrací objekt, který implementuje algoritmus SHA1. Nemusíte mapovat každý popisný název algoritmu na stejnou třídu v konfiguračním souboru.

Seznam výchozích názvů a tříd, na které mapují, najdete pod tématem CryptoConfig.

Viz také