Asignar nombres de algoritmo a clases de criptografía

Los desarrolladores disponen de cuatro maneras de crear un objeto criptográfico mediante Kit de desarrollo de software de Windows (SDK):

  • Crear un objeto mediante el operador new.

  • Crear un objeto que implementa un algoritmo de criptografía concreto llamando al método Create en la clase abstracta de ese algoritmo.

  • Crear un objeto que implementa un algoritmo de criptografía concreto llamando al método System.Security.Cryptography.CryptoConfig.CreateFromName.

  • Crear un objeto que implementa una clase de algoritmos de criptografía (como un cifrado de bloques simétrico) llamando al método Create en la clase abstracta de ese tipo de algoritmo (como SymmetricAlgorithm).

Por ejemplo, supongamos que un desarrollador desea calcular el hash SHA1 de un conjunto de bytes. El espacio de nombres System.Security.Cryptography contiene dos implementaciones del algoritmo SHA1, una implementación estrictamente administrada y otra que contiene CryptoAPI. El desarrollador puede decidir crear una instancia de una implementación SHA1 concreta (como la clase SHA1Managed) llamando al operador new. Sin embargo, si no importa que clase carga el Common Language Runtime siempre y cuando la clase cargue el algoritmo de hash SHA1, el desarrollador puede crear un objeto llamando al método System.Security.Cryptography.SHA1.Create. Este método llama a System.Security.Cryptography.CryptoConfig.CreateFromName("System.Security.Cryptography.SHA1"), que debe devolver una implementación del algoritmo de hash SHA1.

El desarrollador puede llamar también a System.Security.Cryptography.CryptoConfig.CreateFromName("SHA1") porque, de manera predeterminada, la configuración de criptografía contiene nombres breves para los algoritmos que se suministran con .NET Framework.

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

Asignar nombres de algoritmo en los archivos de configuración

De manera predeterminada, el tiempo de ejecución devuelve un objeto de la clase System.Security.Cryptography.SHA1CryptoServiceProvider para los cuatro escenarios. Sin embargo, un administrador de equipo puede cambiar el tipo de objeto que devuelven los métodos de los dos últimos escenarios. Para ello, hay que asignar un nombre de algoritmo descriptivo a la clase que se desea usar en el archivo de configuración del equipo (Machine.config).

En el ejemplo siguiente se muestra cómo se configura el tiempo de ejecución para que System.Security.Cryptography.SHA1.Create, System.Security.CryptoConfig.CreateFromName("SHA1") y System.Security.Cryptography.HashAlgorithm.Create devuelvan un objeto 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>

Se puede especificar el nombre del atributo en el elemento <cryptoClass> (en el ejemplo anterior se llama al atributo MySHA1Hash). El valor del atributo en el elemento <cryptoClass> es una cadena que Common Language Runtime utiliza para buscar la clase. Se puede utilizar cualquier cadena que cumpla los requisitos especificados en Especificar nombres de tipo completos.

Muchos nombres de algoritmo se pueden asignar a la misma clase. El elemento <nameEntry> asigna una clase a un nombre de algoritmo descriptivo. 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 del espacio de nombres System.Security.Cryptography. El valor del atributo class es el nombre del atributo en el elemento <cryptoClass>.

NotaNota

Se puede obtener un algoritmo SHA1 llamando a los métodos System.Security.Cryptography.SHA1.Create o Security.CryptoConfig.CreateFromName("SHA1").Cada método sólo garantiza que devuelve un objeto que implementa el algoritmo SHA1.No es necesario asignar todos los nombres descriptivos de un algoritmo a la misma clase del archivo de configuración.

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

Vea también

Conceptos

Servicios criptográficos

Otros recursos

Configurar clases de criptografía