Hash con ASP.NET

Según la Wikipedia, un hash o función resumen se refiere a una función o método para generar claves o llaves que representen de manera casi unívoca a un documento, registro, archivo, etc.

De este modo, por ejemplo, a partir de un texto my largo, podemos conseguir un "resumen" que en la práctica será irrepeteible de apenas unos pocos bytes de longiud (depende del algoritmo). Utilidades podemos encontrar muchas. Por ejemplo, una de las más comunes que le podemos dar es la de demostrar que un mensaje no ha cambiado.

También puede servir como índice de una base de datos. Por ejemplo, imaginaos la situación de una tabla de una base de datos con un campo con un texto muy largo (1000 páginas impresas) y lo único que tenemos que hacer es insertar registros asegurándonos de que no hay dos textos iguales. Una opción sería hacer un SELECT que recorriera todos los enormes campos; la otra sería añadir otro campo con un hash y dicho SELECT hacerlo de éste.. ganaríamos infinitamente en eficiencia.

Nosotros lo que vamos a hacer es conseguir un hash (en formar de string) a partir de un texto plano mediante el algoritmo de hash MD5:

    using System.Security.Cryptography;
    ...
    ...
    public static string GetHash(string textoPlano)
    {
        byte[] data = System.Text.UTF8Encoding.ASCII.GetBytes(textoPlano);
        MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();
        byte[] hashbyte = md5.ComputeHash(data, 0, data.Length);
        return BitConverter.ToString(hashbyte);
    }


¿Demasiado fácil para ser verdad?

Pues bien, depués de algo tan sencillo, vemos que hay algo mucho más sencillo aún, y es que todos los tipos de datos descendientes de object tienen el método GetHashCode(), por lo que esto también valdría:

    public static int GetHash(string textoPlano)
    {      
        return textoPlano.GetHashCode();

    }

Esta claro que dejamos de tener cierto control sobre lo que ocurre, pero sigue siendo un hash. Eso sí, ahora el valor que se devuelve es un entero, no un string.