次の方法で共有


アルゴリズム名を暗号化クラスにマッピングする

この記事は .NET Framework に固有のものです。 .NET 6 以降のバージョンを含む、.NET の新しい実装には適用されません。

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

  • 新しい演算子を使用してオブジェクトを作成します。

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

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

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

たとえば、開発者がバイトセットの SHA1 ハッシュを計算するとします。 System.Security.Cryptography名前空間には、SHA1 アルゴリズムの 2 つの実装 (純粋に管理された実装と CryptoAPI をラップする実装) が含まれています。 開発者は、SHA1Managed演算子を呼び出すことによって、特定の SHA1 実装 ( など) をインスタンス化することを選択できます。 ただし、クラスが 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.CreateMySHA1HashClass オブジェクトを返すようにランタイムを構成する方法を示しています。

<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名前空間の抽象暗号化クラスの名前を指定できます。 クラス属性の値は、<cryptoClass> 要素内の属性の名前です。

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

既定の名前と、それらがマップするクラスの一覧については、 CryptoConfigを参照してください。

こちらも参照ください