Share via


暗号化クラスへのアルゴリズム名の割り当て

Windows SDK を使用して開発者が暗号化オブジェクトを作成する方法は、次の 4 つです。

  • new 演算子を使用してオブジェクトを作成する。

  • 特定の暗号化アルゴリズムの抽象クラスで Create メソッドを呼び出すことで、そのアルゴリズムが実装されるオブジェクトを作成する。

  • CryptoConfig.CreateFromName メソッドを呼び出して、特定の暗号化アルゴリズムが実装されるオブジェクトを作成する。

  • 暗号化アルゴリズムの抽象クラス (SymmetricAlgorithm など) で Create メソッドを呼び出すことによって、その種類のアルゴリズムのクラス (対称ブロック暗号など) が実装されるオブジェクトを作成する。

たとえば、開発者があるバイトのセットの SHA1 ハッシュを計算するとします。 System.Security.Cryptography 名前空間には、SHA1 アルゴリズムの 2 つの実装 (純粋なマネージド実装と CryptoAPI がラップされる実装) が含まれています。 開発者は、new 演算子を呼び出すことによって、特定の SHA1 実装 (SHA1Managed など) をインスタンス化することを選択できます。 ただし、クラスによって SHA1 ハッシュ アルゴリズムが実装される限り、共通言語ランタイムでどのクラスが読み込まれるかは関係ない場合、開発者は SHA1.Create メソッドを呼び出してオブジェクトを作成できます。 このメソッドによって、System.Security.Cryptography.CryptoConfig.CreateFromName("System.Security.Cryptography.SHA1") が呼び出されます。これにより、SHA1 ハッシュ アルゴリズムの実装が返される必要があります。

また、開発者は System.Security.Cryptography.CryptoConfig.CreateFromName("SHA1") を呼び出すこともできます。既定では、暗号化の構成に .NET Framework に付属するアルゴリズムの短い名前が含まれているためです。

どのハッシュ アルゴリズムが使用されているかは関係ない場合、開発者は HashAlgorithm.Create メソッドを呼び出すことができます。これにより、ハッシュ変換が実装されるオブジェクトが返されます。

構成ファイルでのアルゴリズム名の割り当て

既定では、そのランタイムは 4 つのシナリオすべてに対して SHA1CryptoServiceProvider オブジェクトを返します。 ただし、マシンの管理者は、前の 2 つのシナリオのメソッドで返されるオブジェクトの種類を変更できます。 これを行うには、マシン構成ファイル (Machine.config) で使用するクラスに、アルゴリズムのフレンドリ名を割り当てる必要があります。

次の例は、System.Security.Cryptography.SHA1.CreateSystem.Security.CryptoConfig.CreateFromName("SHA1") 、および System.Security.Cryptography.HashAlgorithm.Create によって MySHA1HashClass オブジェクトが返されるようにランタイムを構成する方法を示しています。

<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 に指定しています)。 <cryptoClass> 要素の属性の値は、共通言語ランタイムでクラスを検索するために使用される文字列です。 「完全修飾型名の指定」で指定された要件を満たしていれば、どのような文字列でも使用できます。

アルゴリズム名の多くは、同じクラスに割り当てることができます。 <nameEntry> 要素によって、クラスが 1 つのわかりやすいアルゴリズム名に割り当てられます。 name 属性には、System.Security.Cryptography.CryptoConfig.CreateFromName メソッドを呼び出すときに使用される文字列、または System.Security.Cryptography 名前空間の抽象暗号化クラスの名前を指定できます。 class 属性の値は、<cryptoClass> 要素内の属性の名前です。

注意

SHA1 アルゴリズムは、SHA1.Create または Security.CryptoConfig.CreateFromName("SHA1") メソッドを呼び出すことで取得できます。 各メソッドによって、SHA1 アルゴリズムが実装されるオブジェクトが返されることのみが保証されます。 アルゴリズムの各フレンドリ名を、構成ファイル内の同じクラスに割り当てる必要はありません。

既定の名前と割り当て先のクラスの一覧については、CryptoConfig に関するページを参照してください。

関連項目