Tutorial Cryptography Application Block Enterprise Library: Hashing

En este tutorial exploraremos como configurar y utilizar Cryptography Application Block de Enterprise Library 5.0. Como pre-requisito debe instalar Enterprise Library.
Puede descargar el codigo fuente de este tutorial y ejecutar la aplicacion de ejemplo.

Configuración

El primer paso para utilizar Cryptography Application Block es configurar los algoritmos que vamos a utilizar. La configuracion se almacena en el mismo archivo de configuración de la aplicación (app.config o web.config). Enterprise Library incluye una herramienta de configuración que facilita la edición de este archivo.

Para acceder a la herramienta desde Visual Studio hacemos click con el botón derecho del mouse sobre el archivo de configuración de la aplicación, en menú contextual haga click en “Edita Enterprise Library v5 Configuration”, como se ve en la siguiente imagen.

Esta herramienta permite agregar configución para cada uno de los bloques de Enterprise Library. Para agregar la configuracion de Cryptography Application Block debemos hacer click en el menu "Blocks" y luego en "Add Cryptography Settings".

Para agregar un algoritmo de hashing hacemos click en la icono con forma de cruz a la derecha de "Hash Providers", luego extendemos el menu "Add Hash Provider" y finalmente hacemos click en "Add Hash Algorithm Provider".

Aparece el cuadro de dialogo para seleccionar el algoritmo. Este de dialogo buscar los algoritmos de hashing dentro de las librerias de .NET y los muestra clasificados por espacio de nombres. Para este ejemplo seleccionaremos "System.Security.Cryptography.Sha256Managed", como se ve en la imagen.

Ahora debemos definir el nombre con el cual nos referiremos a este algoritmo desde el codigo fuente. Como se ve en la imagen abajo lo nombramos "passwordHash". El algoritmo Sha permite optativamente usar un valor "salt" que aumenta la seguridad protegiendonos de ataques de diccionario, en este ejemplo lo activaremos.

Referencias y Espacios de Nombre

Para utilizar Cryptography Application Block debemos agregar referencias a los siguientes ensamblados:

  • Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.dll
  • Microsoft.Practices.EnterpriseLibrary.Common.dll

Estos ensamblados se encuentran en el directorio en que instalo Enterprise Library, por defecto: "C:\Program Files\Microsoft Enterprise Library 5.0\Bin\".

En los archivos de codigo fuente donde usemos el bloque importamos el siguiente espacio de nombre:

using Microsoft.Practices.EnterpriseLibrary.Security.Cryptography;
Ejemplo Obtener el Hash de un Texto

En este ejemplo usaremos Cryptography Application Block para obtener el hash de una texto. Hay varias formas de acceder a la funcionalidad del bloque, en este ejemplo usaremos la mas sencilla, el metodo estatico Cryptographer.CreateHash().
El metodo CreateHash() acepta dos parametros de tipo string, el primero indica el nombre del algoritmo a utilizar, segun fue definido en la configuracion. El segundo es el texto sobre el cual calcularemos el hash.
Cuando es llamado con estos parametros el metodo CreateHash() devuelve el hash en forma de texto, tal como vemos en el siguiente codigo:

public string CrearHash(string texto)
{
    string textoHash = Cryptographer.CreateHash("passwordHash", texto);
    return textoHash;
}
Ejemplo Comparar Texto con un Hash

En este ejemplo usaremos Cryptography Application Block para compara texto con un hash y ver si coinciden. Para esto usamos el metodo Cryptographer.CompareHash().
El metodo CompareHash() acepta tres parametros de tipo string, el primero indica el nombre del algoritmo a utilizar, segun fue definido en la configuracion. El segundo es el texto que compararemos con el hash, y el tercero es el hash mismo en forma de texto.
El metodo CompareHash() devuelve verdadero si efectivamente coinciden o falso si no coinciden.

public bool CompararHash(string textoProbar, string textoHash)
{
    bool result = Cryptographer.CompareHash("passwordHash", textoProbar, textoHash);
    return result;
}
Ejemplo Obtener Hash de un Array de Bytes

En este ejemplo usaremos Cryptography Application Block para obtener el hash de una Array de Bytes. Para esto usamos el metodo Cryptographer.CreateHash().
El metodo CreateHash() acepta dos parametros el primero de tipo string indica el nombre del algoritmo a utilizar, segun fue definido en la configuracion. El segundo es el array de bytes sobre el cual calcularemos el hash.
Cuando es llamado con estos parametros el metodo CreateHash() devuelve el hash tambien en forma de un array de bytes, tal como vemos en el siguiente codigo:

public byte[] CrearHash(byte[] bytes)
{
    byte[] bytesHash = Cryptographer.CreateHash("passwordHash", bytes);
    return bytesHash;
}
Ejemplo Comparar un Array de Bytes con un Hash

En este ejemplo usaremos Cryptography Application Block para comparar un array de bytes con un hash y ver si coinciden. Para esto usamos el metodo Cryptographer.CompareHash().
El metodo CompareHash() acepta tres parametros, el primero de tipo string indica el nombre del algoritmo a utilizar, segun fue definido en la configuracion. El segundo es el array de bytes que compararemos con el hash, y el tercero es el hash expresado en un array de bytes.
El metodo CompareHash() devuelve verdadero si efectivamente coinciden o falso si no coinciden.

public bool CompararHash(byte[] bytesProbar, byte[] bytesHash)
{
    bool result = Cryptographer.CompareHash("passwordHash", bytesProbar, bytesHash);
    return result;
}

Con esto concluimos el tutorial. Hemos agregado las referencias a los ensamblados necesarios, configuramos un algoritmo de hashing Sha256, y lo usamos para obtener el hash de un texto y de un array de bytes, tambien lo usamos para comparar hashes con valores y ver si coincidian.


Artículos en detalle