暗号化クラスへのアルゴリズム名の割り当てMapping Algorithm Names to Cryptography Classes

Windows SDK を使用して、開発者が暗号化オブジェクトを作成するには、次の4つの方法があります。There are four ways a developer can create a cryptography object using the Windows SDK:

  • New演算子を使用してオブジェクトを作成します。Create an object by using the new operator.

  • 特定の暗号化アルゴリズムを実装するオブジェクトを作成するには、そのアルゴリズムの抽象クラスで create メソッドを呼び出します。Create an object that implements a particular cryptography algorithm by calling the Create method on the abstract class for that algorithm.

  • メソッドを呼び出して、特定の暗号化アルゴリズムを実装するオブジェクトを作成 CryptoConfig.CreateFromName します。Create an object that implements a particular cryptography algorithm by calling the CryptoConfig.CreateFromName method.

  • アルゴリズムの種類 (など) の抽象クラスで create メソッドを呼び出すことによって、暗号アルゴリズムのクラス (対称ブロック暗号など) を実装するオブジェクトを作成 SymmetricAlgorithm します。Create an object that implements a class of cryptographic algorithms (such as a symmetric block cipher) by calling the Create method on the abstract class for that type of algorithm (such as SymmetricAlgorithm).

たとえば、開発者がバイトセットの SHA1 ハッシュを計算するとします。For example, suppose a developer wants to compute the SHA1 hash of a set of bytes. 名前空間には、 System.Security.Cryptography SHA1 アルゴリズムの2つの実装 (純粋に管理された実装と CryptoAPI をラップする実装) が含まれています。The System.Security.Cryptography namespace contains two implementations of the SHA1 algorithm, one purely managed implementation and one that wraps CryptoAPI. 開発者は、 SHA1Managed new 演算子を呼び出すことによって、特定の SHA1 実装 (など) をインスタンス化することを選択できます。The developer can choose to instantiate a particular SHA1 implementation (such as the SHA1Managed) by calling the new operator. ただし、クラスで SHA1 ハッシュアルゴリズムが実装されている限り、共通言語ランタイムがどのクラスを読み込むかに関係なく、開発者はメソッドを呼び出してオブジェクトを作成でき SHA1.Create ます。However, if it does not matter which class the common language runtime loads as long as the class implements the SHA1 hash algorithm, the developer can create an object by calling the SHA1.Create method. このメソッドは、 CreateFromName ("CryptoConfig") を呼び出します。これは、SHA1 ハッシュアルゴリズムの実装を返す必要があります。This method calls System.Security.Cryptography.CryptoConfig.CreateFromName("System.Security.Cryptography.SHA1"), which must return an implementation of the SHA1 hash algorithm.

また、 CryptoConfig を呼び出すこともできます。これは、既定では、暗号化構成には .NET Framework に出荷されるアルゴリズムの短い名前が含まれているためです。The developer can also call System.Security.Cryptography.CryptoConfig.CreateFromName("SHA1") because, by default, cryptography configuration includes short names for the algorithms shipped in the .NET Framework.

どのハッシュアルゴリズムが使用されているかに関係なく、開発者はメソッドを呼び出すことができ HashAlgorithm.Create ます。このメソッドは、ハッシュ変換を実装するオブジェクトを返します。If it does not matter which hash algorithm is used, the developer can call the HashAlgorithm.Create method, which returns an object that implements a hashing transformation.

構成ファイルでのアルゴリズム名のマッピングMapping Algorithm Names in Configuration Files

既定では、ランタイムは SHA1CryptoServiceProvider 4 つのシナリオすべてに対してオブジェクトを返します。By default, the runtime returns a SHA1CryptoServiceProvider object for all four scenarios. ただし、コンピューターの管理者は、最後の2つのシナリオのメソッドが返すオブジェクトの種類を変更できます。However, a machine administrator can change the type of object that the methods in the last two scenarios return. これを行うには、わかりやすいアルゴリズム名をマシン構成ファイル (Machine.config) で使用するクラスにマップする必要があります。To do this, you must map a friendly algorithm name to the class you want to use in the machine configuration file (Machine.config).

次の例は、 CryptoConfig、CreateFromName ("SHA1")、およびHashAlgorithmがオブジェクトを返すようにランタイムを構成する方法を示しています。この例では、このランタイムを構成しています。 MySHA1HashClassThe following example shows how to configure the runtime so that System.Security.Cryptography.SHA1.Create, System.Security.CryptoConfig.CreateFromName("SHA1"), and System.Security.Cryptography.HashAlgorithm.Create return a MySHA1HashClass object.

<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 ます)。You can specify the name of the attribute in the <cryptoClass> element (the previous example names the attribute MySHA1Hash). 要素の属性の値は、 <cryptoClass> 共通言語ランタイムがクラスを検索するために使用する文字列です。The value of the attribute in the <cryptoClass> element is a string that the common language runtime uses to find the class. 「完全修飾型名の指定」で指定した要件を満たす任意の文字列を使用できます。You can use any string that meets the requirements specified in Specifying Fully Qualified Type Names.

多くのアルゴリズム名は、同じクラスにマップできます。Many algorithm names can map to the same class. <nameEntry> 要素は、クラスを1つのわかりやすいアルゴリズム名にマップします。The <nameEntry> element maps a class to one friendly algorithm name. Name属性には、 CryptoConfigメソッドを呼び出すときに使用される文字列、または名前空間の抽象暗号化クラスの名前を指定できます。 System.Security.CryptographyThe name attribute can be either a string that is used when calling the System.Security.Cryptography.CryptoConfig.CreateFromName method or the name of an abstract cryptography class in the System.Security.Cryptography namespace. Class属性の値は、要素内の属性の名前です <cryptoClass>The value of the class attribute is the name of the attribute in the <cryptoClass> element.

注意

SHA1 アルゴリズムを取得するに SHA1.Create は、または CryptoConfig CreateFromName ("SHA1") メソッドを呼び出します。You can get an SHA1 algorithm by calling the SHA1.Create or the Security.CryptoConfig.CreateFromName("SHA1") method. 各メソッドは、SHA1 アルゴリズムを実装するオブジェクトを返すことだけを保証します。Each method guarantees only that it returns an object that implements the SHA1 algorithm. アルゴリズムの各フレンドリ名を、構成ファイル内の同じクラスにマップする必要はありません。You do not have to map each friendly name of an algorithm to the same class in the configuration file.

既定の名前とマップ先のクラスの一覧については、「」を参照してください CryptoConfigFor a list of default names and the classes they map to, see CryptoConfig.

関連項目See also