Udostępnij za pośrednictwem


Mapowanie nazw algorytmów na klasy kryptografii

Uwaga

Ten artykuł jest specyficzny dla programu .NET Framework. Nie ma zastosowania do nowszych implementacji platformy .NET, w tym .NET 6 i nowszych wersji.

Istnieją cztery sposoby tworzenia obiektu kryptografii przez dewelopera przy użyciu zestawu Windows SDK:

  • Utwórz obiekt przy użyciu nowego operatora.

  • Utwórz obiekt, który implementuje określony algorytm kryptografii, wywołując metodę Create w klasie abstrakcyjnej dla tego algorytmu.

  • Utwórz obiekt, który implementuje określony algorytm kryptografii, wywołując metodę CryptoConfig.CreateFromName .

  • Utwórz obiekt, który implementuje klasę algorytmów kryptograficznych (takich jak symetryczny szyfr blokowy), wywołując metodę Create w klasie abstrakcyjnej dla tego typu algorytmu (na przykład SymmetricAlgorithm).

Załóżmy na przykład, że deweloper chce obliczyć skrót SHA1 zestawu bajtów. System.Security.Cryptography Przestrzeń nazw zawiera dwie implementacje algorytmu SHA1, jedną wyłącznie zarządzaną implementację i jedną, która opakowuje interfejs CryptoAPI. Deweloper może utworzyć wystąpienie określonej implementacji SHA1 (np SHA1Managed. ) przez wywołanie nowego operatora. Jeśli jednak nie ma znaczenia, która klasa środowiska uruchomieniowego języka wspólnego ładuje się tak długo, jak klasa implementuje algorytm wyznaczania wartości skrótu SHA1, deweloper może utworzyć obiekt przez wywołanie SHA1.Create metody . Ta metoda wywołuje metodę System.Security.Cryptography.CryptoConfig.CreateFromName("System.Security.Cryptography.SHA1"), która musi zwrócić implementację algorytmu wyznaczania wartości skrótu SHA1.

Deweloper może również wywołać metodę System.Security.Cryptography.CryptoConfig.CreateFromName("SHA1"), ponieważ domyślnie konfiguracja kryptografii zawiera krótkie nazwy algorytmów dostarczanych w programie .NET Framework.

Jeśli nie ma znaczenia, który algorytm wyznaczania wartości skrótu jest używany, deweloper może wywołać HashAlgorithm.Create metodę, która zwraca obiekt implementujący przekształcenie skrótu.

Mapowanie nazw algorytmów w plikach konfiguracji

Domyślnie środowisko uruchomieniowe zwraca SHA1CryptoServiceProvider obiekt dla wszystkich czterech scenariuszy. Jednak administrator maszyny może zmienić typ obiektu zwracanego przez metody w dwóch ostatnich scenariuszach. W tym celu należy zamapować przyjazną nazwę algorytmu na klasę, której chcesz użyć w pliku konfiguracji maszyny (Machine.config).

W poniższym przykładzie pokazano, jak skonfigurować środowisko uruchomieniowe, tak aby System.Security.Cryptography.SHA1.Create, System.Security.CryptoConfig.CreateFromName("SHA1") i System.Security.Cryptography.HashAlgorithm.Create zwrócił MySHA1HashClass obiekt.

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

Możesz określić nazwę atrybutu w <elemecie cryptoClass> (poprzednie przykładowe nazwy atrybutu MySHA1Hash). Wartość atrybutu w elemecie <cryptoClass> jest ciągiem używanym przez środowisko uruchomieniowe języka wspólnego do znalezienia klasy. Można użyć dowolnego ciągu spełniającego wymagania określone w temacie Określanie w pełni kwalifikowanych nazw typów.

Wiele nazw algorytmów może mapować na tę samą klasę. Element <nameEntry> mapuje klasę na jedną przyjazną nazwę algorytmu. Atrybut name może być ciągiem używanym podczas wywoływania metody System.Security.Cryptography.CryptoConfig.CreateFromName lub nazwy abstrakcyjnej klasy kryptograficznej w System.Security.Cryptography przestrzeni nazw. Wartość atrybutu klasy jest nazwą atrybutu w elemecie <cryptoClass>.

Uwaga

Algorytm SHA1 można uzyskać, wywołując SHA1.Createmetodę Security.CryptoConfig.CreateFromName("SHA1"). Każda metoda gwarantuje tylko, że zwraca obiekt, który implementuje algorytm SHA1. Nie trzeba mapować każdej przyjaznej nazwy algorytmu na tę samą klasę w pliku konfiguracji.

Aby uzyskać listę nazw domyślnych i klas, do których są mapowana, zobacz CryptoConfig.

Zobacz też