Compartir a través de


Asignar nombres de algoritmo a clases de criptografía

Nota:

Este artículo es específico de .NET Framework. No se aplica a implementaciones más recientes de .NET, incluidas .NET 6 y versiones posteriores.

Hay cuatro maneras en que un desarrollador puede crear un objeto de criptografía mediante Windows SDK:

  • Cree un objeto mediante el operador new .

  • Cree un objeto que implemente un algoritmo de criptografía determinado llamando al método Create en la clase abstracta para ese algoritmo.

  • Cree un objeto que implemente un algoritmo de criptografía determinado llamando al CryptoConfig.CreateFromName método .

  • Cree un objeto que implemente una clase de algoritmos criptográficos (como un cifrado de bloques simétricos) llamando al método Create en la clase abstracta para ese tipo de algoritmo (como SymmetricAlgorithm).

Por ejemplo, supongamos que un desarrollador quiere calcular el hash SHA1 de un conjunto de bytes. El System.Security.Cryptography espacio de nombres contiene dos implementaciones del algoritmo SHA1, una implementación puramente administrada y otra que encapsula CryptoAPI. El desarrollador puede optar por crear una instancia de una implementación SHA1 determinada (por ejemplo, ) SHA1Managedllamando al nuevo operador. Sin embargo, si no importa qué clase cargue el Common Language Runtime siempre que la clase implemente el algoritmo de hash SHA1, el desarrollador puede crear un objeto llamando al método SHA1.Create. Este método llama a System.Security.Cryptography.CryptoConfig.CreateFromName("System.Security.Cryptography.SHA1"), que debe devolver una implementación del algoritmo hash SHA1.

El desarrollador también puede llamar a System.Security.Cryptography.CryptoConfig.CreateFromName("SHA1") porque, de forma predeterminada, la configuración de criptografía incluye nombres cortos para los algoritmos enviados en .NET Framework.

Si no importa qué algoritmo hash se usa, el desarrollador puede llamar al HashAlgorithm.Create método , que devuelve un objeto que implementa una transformación hash.

Asociar los nombres de algoritmos en los archivos de configuración

De forma predeterminada, el runtime devuelve un SHA1CryptoServiceProvider objeto para los cuatro escenarios. Sin embargo, un administrador de la máquina puede cambiar el tipo de objeto que devuelven los métodos de los dos últimos escenarios. Para ello, debe asignar un nombre de algoritmo descriptivo a la clase que desea usar en el archivo de configuración de la máquina (Machine.config).

En el ejemplo siguiente se muestra cómo configurar el entorno de ejecución para que System.Security.Cryptography.SHA1.Create, System.Security.CryptoConfig.CreateFromName("SHA1") y System.Security.Cryptography.HashAlgorithm.Create devuelvan un MySHA1HashClass objeto .

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

Puede especificar el nombre del atributo en el <elemento cryptoClass> (el ejemplo anterior asigna el nombre al atributo MySHA1Hash). El valor del atributo en el <elemento cryptoClass> es una cadena que Common Language Runtime usa para buscar la clase . Puede usar cualquier cadena que cumpla los requisitos especificados en Especificación de nombres de tipo completos.

Muchos nombres de algoritmo pueden asignarse a la misma clase. El <elemento nameEntry> asigna una clase a un nombre de algoritmo amigable. El atributo name puede ser una cadena que se usa al llamar al método System.Security.Cryptography.CryptoConfig.CreateFromName o el nombre de una clase de criptografía abstracta en el System.Security.Cryptography espacio de nombres. El valor del atributo de clase es el nombre del atributo en el <elemento cryptoClass> .

Nota:

Puede obtener un algoritmo SHA1 llamando al SHA1.Create o al método Security.CryptoConfig.CreateFromName("SHA1"). Cada método garantiza solo que devuelve un objeto que implementa el algoritmo SHA1. No es necesario asignar cada nombre descriptivo de un algoritmo a la misma clase del archivo de configuración.

Para obtener una lista de nombres predeterminados y las clases a las que se asignan, vea CryptoConfig.

Consulte también