Sdílet prostřednictvím


Mapování názvů algoritmů na třídy šifrování

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í nového operátoru.

  • Vytvořte objekt, který implementuje konkrétní kryptografický algoritmus voláním Metody Create 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 metody Create pro tento typ algoritmu (například SymmetricAlgorithm).

Předpokládejme například, že vývojář chce vypočítat hodnotu hash SHA1 sady bajtů. Obor System.Security.Cryptography názvů obsahuje dvě implementace algoritmu SHA1, jednu čistě spravovanou implementaci a druhou, která zabalí CryptoAPI. Vývojář se může rozhodnout vytvořit instanci konkrétní implementace SHA1 (například SHA1Managed) voláním nového operátoru. 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 popisný název algoritmu na třídu, kterou chcete použít v konfiguračním souboru počítače (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>

Název atributu můžete zadat v elementu < cryptoClass> (předchozí příklad pojmenuje atribut).MySHA1Hash 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 <nameEntry> mapuje třídu na jeden popisný název algoritmu. Atribut názvu 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 třídy je název atributu v cryptoClass> elementu<.

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 v tématu CryptoConfig.

Viz také