a deshoras

Generando un hash sha1 con ASP.NET y C# de forma sencilla y simple.

Posted by: César on: Junio 23, 2008

SHA1 es un algoritmo criptográfico perteneciente a la familia de algoritmos criptográficos SHA (Secure Hash Algorithm o Algoritmo de Hash Seguro) de la Agencia Nacional de Seguridad de Estados Unidos y desarrollada por el NIST (National Institude of Standards and Technology).

El primero de estos algoritmos fue desarrollado en el año 93 y fue el SHA (ahora conocido como SHA-0), 4 años después, fue sustituido por el SHA1 y posteriormente han aparecido SHA-224, SHA-256, SHA-384 y SHA-512 y todos son conocidos como SHA-2.

En 1998, se encontró una vulnerabilidad en SHA-0 pero esta no afectaba a SHA1 del cual no se ha encontrado ningún ataque efectivo. En 2004, fueron publicados una serie de ataques sobre hash parecidos al que genera SHA-1 planteándose por lo tanto dudas sobre la seguridad que este aporta.

Por medio del SHA1, vamos a obtener un hash sobre un conjunto de datos. Un hash viene a ser un conjunto de datos obtenido en base a otros.

Este tipo de algoritmos, se usa para certificar que una secuencia de datos no ha sido alterada, ya que si se modifica el valor del hash, implica que esa información ha sido alterada.

SHA1 produce una salida de 160 bits de un mensaje que puede tener un tamaño máximo de 264 bits y se basa en principios similares a los usados por Ronald Rivest (del MIT) para desarrollar los algoritmos MD4 y MD5.

¿Cómo podemos obtener un hash mediante el SHA1?

Pues vamos a verlo, la verdad es que con c# es sencillo dado que el Framework (como siempre) nos proporcionan unas clases para realizar esto.

Lo único que tenemos que hacer es crear una instancia de la clase SHA1 y pasarle un array de bytes al método ComputeHash.
El código necesario es el siguiente:

public static string GetSHA1(string str)
{
SHA1 sha1 = SHA1Managed.Create();
ASCIIEncoding encoding = new ASCIIEncoding();
byte[] stream = null;
StringBuilder sb = new StringBuilder();
stream = sha1.ComputeHash(encoding.GetBytes(str));
for (int i = 0; i < stream.Length; i++) sb.AppendFormat("{0:x2}", stream[i]);
return sb.ToString();
}

Y esto es todo amigos míos, como siempre, mi consejo es que os bajéis el código ya que así lo podéis testear con una prueba unitaria y ver cómo funciona en detalle.

Otros algoritmos criptográficos en A deshoras

Enlaces relacionados

Descargas (Download)

Escribe un comentario

¿Qué es esto?

Este es el blog personal de César Pérez y su temática va a ser lo relacionado con el desarrollo web, ya sea usabilidad, diseño o programación. Espero que os guste. ;-)

  • César: Hola Fernando, si lo que quieres es que cuando inicien la aplicación les aparezca en un idioma determinado, puedes intentar obtener la cultura del
  • Fernando: Hola, muy buen articulo, en estos momentos estoy haciendo una aplicacion que no es multidioma pero el cliente lo que me dice es que los usarios finale
  • César: muchas gracias!!!! me alegro que te guste. salud