Udostępnij za pomocą


Mapowanie nazw algorytmów na klasy kryptograficzne

Uwaga / Notatka

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 new operatora .

  • Utwórz obiekt, który implementuje określony algorytm kryptografii, wywołując Create metodę 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 Create metodę 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 operatora new. Jeśli jednak nie ma znaczenia, która klasa jest ładowana przez wspólne środowisko uruchomieniowe, pod warunkiem że klasa implementuje algorytm skrótu SHA1, deweloper może utworzyć obiekt, wywołując metodę SHA1.Create. 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żeli nie ma znaczenia, który algorytm haszujący jest używany, deweloper może wywołać metodę HashAlgorithm.Create, która zwraca obiekt implementujący przekształcenie haszujące.

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 elemencie <cryptoClass> (poprzedni przykład nazywa atrybut 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 odnosić się do tej samej klasy. 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 klasy abstrakcyjnej kryptografii w System.Security.Cryptography przestrzeni nazw. Wartość atrybutu class jest nazwą atrybutu w elemecie <cryptoClass> .

Uwaga / Notatka

Algorytm SHA1 można uzyskać, wywołując metodę SHA1.Create lub 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 także