Buen día para todos,

En este día quiero compartir otro pequeño tutorial en el que aprenderemos a encriptar cadenas de string mediante las funciones hash de MD5, SHA256 y SHA512; estas son funciones de un solo sentido lo que quiere decir que una vez encriptado el string no es posible revertir este proceso por lo que para validar el resultado se hace necesario aplicar la misma función al string que se desea verificar para luego comparar los dos resultados.

Es muy recurrente encontrar en varios foros la inquietud de como realizar este proceso, debido a que estos mismos métodos son empleados en PHP y en algunos proyectos necesitan interactuar con bases de datos en los que manejan datos que han sido manejados con estas funciones.

Para comenzar ya he creado un proyecto que he llamado “Tutorial_Encriptar”, al cual le he agregado los siguiente controles:

  • 6 Buttons: En la propiedad “Name” (BtnMD5Lock, BtnSHA256Lock, BtnSHA512Lock, BtnMD5Unlock, BtnSHA256Unlock, BtnSHA512Unlock), en su propiedad “Text” (MD5, SHA256, , SHA512).
  • 3 TextBox: En la propiedad “Name” (TxtUsuario, TxtEncriptado, TxtValidar).
  • 1 Label: En la propiedad “Name” (LblEstado), en su propiedad “Text” (Resultado).

Una vez finalizado nuestro formulario debería tener una apariencia similar a la siguiente:

sshot-1
Formulario del proyecto

Para continuar haremos uso de la librería “OC.Core.Crypto” que encontramos disponible como un paquete NuGet y que nos permite de forma fácil utilizar estas funciones en Vb.Net. Para esto vamos al menú Herramientas->Administrador de paquetes NuGet->Administrar paquetes NuGet para la solución; en este apartado realizamos la búsqueda de nuestro paquete y lo agregamos al proyecto.

Librería OC.Core.Crypto

sshot-2
Instalación del paquete NuGet OC.Core.Crypto

Una vez agregado el paquete correctamente podemos apreciar en el explorar de soluciones las nuevas referencias que se incorporaron al proyecto.

sshot-3
Referencias agregadas al proyecto

Ahora que ya tenemos listo nuestro proyecto procederemos a programar primero los botones para encriptar, para lo cual en cada uno damos doble clic y escribiremos el código según corresponda.

Private Sub BtnMD5Lock_Click(sender As Object, e As EventArgs) Handles BtnMD5Lock.Click
    ':::Instanciamos al metodo Hash de la libreria OC.Core.Crypto
    Dim has As New OC.Core.Crypto.Hash
    ':::Obtenemos el valor del string ingresado por el usuario
    Dim texto As String = TxtUsuario.Text
    ':::Encriptamos el string recibido al metodo MD5 y los motramos en el TextBox en minúsculas
    TxtEncriptado.Text = has.MD5(texto).ToLower
End Sub

Private Sub BtnSHA256Lock_Click(sender As Object, e As EventArgs) Handles BtnSHA256Lock.Click
    ':::Instanciamos al metodo Hash de la libreria OC.Core.Crypto
    Dim has As New OC.Core.Crypto.Hash
    ':::Obtenemos el valor del string ingresado por el usuario
    Dim texto As String = TxtUsuario.Text
    ':::Encriptamos el string recibido al metodo SHA256 y los motramos en el TextBox en minúsculas
    TxtEncriptado.Text = has.Sha256(texto).ToLower
End Sub

Private Sub BtnSHA512Lock_Click(sender As Object, e As EventArgs) Handles BtnSHA512Lock.Click
    ':::Instanciamos al metodo Hash de la libreria OC.Core.Crypto
    Dim has As New OC.Core.Crypto.Hash
    ':::Obtenemos el valor del string ingresado por el usuario
    Dim texto As String = TxtUsuario.Text
    ':::Encriptamos el string recibido al metodo SHA512 y los motramos en el TextBox en minúsculas
    TxtEncriptado.Text = has.Sha512(texto).ToLower
End Sub

Como vemos es muy sencilla la implementación de esta librería y con un provechoso uso para nuestros proyectos. Para continuar ahora repetimos el paso pero con los botones para validar el string ingresado contra otro string y verificar si son iguales o no, teniendo en cuenta que este procedimiento es sensible al ingreso de mayúsculas y minúsculas.


Private Sub BtnMD5Unlock_Click(sender As Object, e As EventArgs) Handles BtnMD5Unlock.Click
    ':::Instanciamos al metodo Hash de la libreria OC.Core.Crypto
    Dim has As New OC.Core.Crypto.Hash
    ':::Obtenemos el valor del string ingresado por el usuario
    Dim texto As String = TxtValidar.Text
    ':::Encriptamos el string recibido al metodo MD5
    Dim TextoMd5 = has.MD5(texto).ToLower

    ':::Validamos si el resultado de ambos es igual y mostramos el mensaje en el Label -- Procedimiento sensible a mayúsculas y minúsculas
    If TxtEncriptado.Text.Equals(TextoMd5) Then
        LblEstado.Text = "Coinciden"
        LblEstado.ForeColor = Color.Green
    Else
        LblEstado.Text = "No Coinciden"
        LblEstado.ForeColor = Color.Red
    End If
End Sub

Private Sub BtnSHA256Unlock_Click(sender As Object, e As EventArgs) Handles BtnSHA256Unlock.Click
    ':::Instanciamos al metodo Hash de la libreria OC.Core.Crypto
    Dim has As New OC.Core.Crypto.Hash
    ':::Obtenemos el valor del string ingresado por el usuario
    Dim texto As String = TxtValidar.Text
    ':::Encriptamos el string recibido al metodo SHA256 en minúsculas
    Dim TextoSha256 = has.Sha256(texto).ToLower

    ':::Validamos si el resultado de ambos es igual y mostramos el mensaje en el Label -- Procedimiento sensible a mayúsculas y minúsculas
    If TxtEncriptado.Text.Equals(TextoSha256) Then
        LblEstado.Text = "Coinciden"
        LblEstado.ForeColor = Color.Green
    Else
        LblEstado.Text = "No Coinciden"
        LblEstado.ForeColor = Color.Red
    End If
End Sub

Private Sub BtnSHA512Unlock_Click(sender As Object, e As EventArgs) Handles BtnSHA512Unlock.Click
    ':::Instanciamos al metodo Hash de la libreria OC.Core.Crypto
    Dim has As New OC.Core.Crypto.Hash
    ':::Obtenemos el valor del string ingresado por el usuario
    Dim texto As String = TxtValidar.Text
    ':::Encriptamos el string recibido al metodo SHA512 en minúsculas
    Dim TextoSha512 = has.Sha512(texto).ToLower

    ':::Validamos si el resultado de ambos es igual y mostramos el mensaje en el Label -- Procedimiento sensible a mayúsculas y minúsculas
    If TxtEncriptado.Text.Equals(TextoSha512) Then
        LblEstado.Text = "Coinciden"
        LblEstado.ForeColor = Color.Green
    Else
        LblEstado.Text = "No Coinciden"
        LblEstado.ForeColor = Color.Red
    End If
End Sub

Una vez terminado podemos apreciar que el procedimiento es muy similar, lo que hacemos con el segundo string es convertirlo también al método seleccionado y luego con el método “Equals” propio de Vb.Net determinamos si son o no iguales.

Método Object.Equals

Para terminar realizaremos una prueba con cada método para ver como funciona usando el texto “Aprendamos de Programación” y luego solo cambiaremos la primera letra a minúscula quedando “aprendamos de Programación”.

Como podemos observar los métodos se ejecutan correctamente para MD5, SHA256 y SHA512 ademas la validación se realiza de manera exacta.

Dejo una pagina que ofrece un servicio gratuito para que puedan realizar comparaciones y pruebas, no me hago responsable por esta pagina debido a que fue elegida como primer resultado en una búsqueda google.

Hash encryption value calculator


Como siempre dejare el proyecto en un enlace de Mega para que lo descarguen y estudien mas detenidamente.

https://goo.gl/RSk6r2

Cualquier duda estaré presto a colaborar en todo lo que me este posible.

Buen día para todos.

Anuncios