martes, 11 de agosto de 2009 a las 18:55hs por Gustavo Cantero (The Wolf)
Muchas veces necesitamos comparar un array de bytes, verificar que una contraseña es correcta sin almacenar la original o verificar la firma digital de un documento. Para realizar esto se puede crear el Hash del set de datos original y compararlo con el del nuevo. En el caso de la contraseña, se puede almacenar el Hash de la clave original y luego verificar que este dato sea igual al de la clave a comparar, logrando de esta manera que se pueda garantizar que aunque alguien pueda ingresar en la base de datos (incluso el mismo personal de la empresa) no podrán obtener la clave ingresada del usuario.
Para calcular el Hash primero hay que crear una instancia del algoritmo a utilizar, los cuales se encuentran en el namespace System.Security.Cryptography y heredan de la clase HashAlgorithm. Ejemplos de estas clases son RIPEMD160, MD5 y SHA512.
Luego de esto simplemente tenemos que invocar el método ComputeHash de la instancia pasándole el vector de bytes del cual se desea calcular el Hash. En caso de querer calcular el de un texto primero se deberá obtener los bytes del texto, por ejemplo, utilizando el método GetBytes de algún Enconding.
El Hash es otro vector de bytes por lo cual, si queremos mostrarlo en pantalla, podríamos convertirlo a base 64.
A continuación les dejo un ejemplo de cómo calcular el Hash de un string con el algoritmo SHA512 y guardarlo en otro string:
using System.Security.Cryptography; using System.Text; using System; … string strOriginal = "Cadena de la cual calcular el hash"; byte[] bytOriginal = Encoding.ASCII.GetBytes(strOriginal); SHA512 objAlgoritmo = SHA512.Create(); byte[] bytHash = objAlgoritmo.ComputeHash(bytOriginal); string strHash = Convert.ToBase64String(bytHash);
Por último les dejo un pequeño proyecto hecho con WPF donde se calculo el hash de un texto ingresado utilizando distintos algoritmos.
Artículos relacionados
Categoria .NET Framework, Seguridad | Etiquetas: Hash
funciona bien también para sha256; una consulta, ¿lo has hecho del lado del cliente para sacar el Hash de un archivo?
No lo probé, pero si puedes abrir el archivo con un FileStream, se lo puedes pasar por parámetro al método ComputeHash y debería funcionar.
Ok gracias lo intentare, Una consulta, veo que documentaste todo lo referente a la firma digital, estoy trabajando en eso y me surgió un tema, firmo un PDF y cuando quiero firmarlo con otro certificado/usuario me marca error en la primera firma, te ha sucedido? La primero la emito de tipo «CERTIFIED_FORM_FILLING» y las siguiente con «NOT_CERTIFIED» pues así lo lei en el iText7.
Saludos.
Hola Edgar.
Nunca me pasó eso. ¿La firma está realizada con un certificado de una entidad confiable o es una firma creada en la misma máquina?
Al parecer ya me jalo la parte de la firma Gustavo, agregue un «UseAppendMode()» en el «PdfSigner» y me jalo; estoy en México y utilizare certificados del SAT, ahora me sigue Validar firmas y certificados (n)
Buenísimo!
Gracias por compartirlo
Saludos.