VB.NET: Hash MD5 y SHA fácil

En el artículo de hoy aprenderemos a obtener el hash MD5 y SHA para una cadena de una forma muy sencilla mediante Visual Basic.NET. Comenzaremos observando el código que genera los valores:

Imports System.Text
Imports System.Security.Cryptography

Function generarMD5(ByVal sCadena As String) As String
  ' Objeto de codificación
  Dim ueCodigo As New UnicodeEncoding()
  ' Objeto para instanciar las codificación
  Dim Md5 As New MD5CryptoServiceProvider()

  ' Calcula el valor hash de la cadena recibida
  Dim bHash() As Byte = Md5.ComputeHash(ueCodigo.GetBytes(sCadena))

  ' Convierte el valor anterior en cadena y lo devuelve
  Return Convert.ToBase64String(bHash)
End Function

Function generarSHA(ByVal sCadena As String) As String
  ' Objeto de codificación
  Dim ueCodigo As New UnicodeEncoding()
  ' Objeto para instanciar las codificación
  Dim SHA As New SHA512Managed</code>

  ' Calcula el valor hash de la cadena recibida
  Dim bHash() As Byte = SHA.ComputeHash(ueCodigo.GetBytes(sCadena))

  ' Convierte el valor anterior en cadena y lo devuelve
  Return Convert.ToBase64String(bHash)
End Function

Como se puede observar, las dos funciones son prácticamente iguales y no tienen muchos misterios. Para realizar la codificación lo único que se hace, es utilizar un objeto UnicodeEncoding que se utilizará para descomponer en un array de bytes la cadena de la que quiere obtener su hash, para a continuación codificar dicho array.

Cabe recordar, que es importante incluir las librerías donde se encuentran tanto UnicodeEncoding como las funciones de hash, para ello nos remitimos a las primeras líneas del código anterior:

Imports System.Text
Imports System.Security.Cryptography

A modo de ejemplo, las dos funciones anteriores están implementadas en una sencilla aplicación llamada Hasher cuyo código fuente podréis descarga y analizar. También podéis encontrar la aplicación, en sus versiones tempranas en Codeplex.

You may also like...

9 Responses

  1. Judavi dice:

    Esta bueno el articulo, pero sería bueno si muestras un ejemplo de como usarlo.
    Si alguien dio con tu articulo es por que seguramente esta muy perdido y necesita más orientación

    • Jose dice:

      Buenas 🙂

      El uso de las funciones creadas sería sencillo, por ejemplo si tenemos un String llamado sNombre y lo queremos codificar. Guardaremos el resultado en sCodif, con lo que nos quedaría el siguiente código:

      sCodif = generarMD5(sNombre)

      Respecto a las funciones que nos ofrece VB:

      • computeHash() básicamente lo que hace es transformar un array de bytes que recibe como entrada (por ello la conversión de la cadena en bytes) en otro codificado.
      • ToBase64String trasforma nuevamente el array en una cadena que podemos representar.

      Vamos a ver un ejemplo de uso en una aplicación. Imaginemos que tenemos una aplicación que guarda nombre de usuario y contraseñas. Para guardar las contraseñas utilizaremos una de las funciones. Ahora pensemos que alguien a introducido su contraseña y tras verificar que el usuario existe, las comprobamos pues sería algo así:

      if generarMD5(txtClave.text) = sClaveLeida then
      ...
      else
      Messagebox.Show("Clave incorrecta")
      end if

  2. Judavi dice:

    Muchas gracias por el aporte 🙂

  3. Mauro dice:

    Muy bueno tu función.
    Ahora tengo una duda:
    Si quisiera usa una semilla (una cadena de texto) con el MD5 donde habitualmente se le agrega?

  4. SysFactory dice:

    Hola el ego es algo jodido como dicen en mi pais
    me demore 2 dias buscando como se hace y decidi compartir con ustedes todo el proyecto que anque es facil se que no es igual para los que apenas comenzamos en esto ahi les va

    http://www.megaupload.com/?d=A9SN42A8
    saludos SysFactory mmontalvova@gmail.com

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

El tiempo límite ha expirado. Por favor, recarga el CAPTCHA.