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.
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
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:
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
Excelente!!
Ahora si que le dejo un 5 a tú articulo!!!!
Muchas gracias por el ejemplo 😀
Por cierto el resto de tú blog también esta genial!
¡Muchas gracias a ti :D!
Muchas gracias por el aporte 🙂
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?
La verdad es que no entiendo muy bien tu pregunta ^^’
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
ya no esta ariva tu link
Excelente y muchas gracias. Con lo anterior se logro CODIFICAR la cadena de texto, cual seria el codigo para DECODIFICAR y me devuelva la misma cadena de texto
Buenas Ángel,
el concepto de hash MD5 y SHA es que no son reversibles. Ten en cuenta, que puedes escribir 1000 caracteres, que quedarán reducidos a unas pocas decenas. Podemos pensar en ellos, como un checksum, es decir, en su mayor parte serán únicos, pero no podemos saber cuál es la cadena origen. Es más, dos frases distintas, pueden producir un mismo hash. Es por ello que no hay código para decodificarlos.
Por ejemplo, los podemos usar para almacenar claves. De forma que cuando el usuario se registre, su clave se almacena con SHA, y cuando el usuario vaya a hacer login, codificamos a SHA la clave que a introducido y la comparamos con la original. Esto nos aporta la capa de seguridad, de que si alguien ajeno accede a la base de datos, sabe los hash de las claves, pero no las claves, por lo que o prueba un ataque de fuerza bruta, o no tiene forma de conocerlas.
Esta genial. Me encanta la explicación.
Soy novato en esto de la programación. Me encanta.
Ahora me gustaría saber cómo puedo validar un usuario y su contraseña sobre Windows. Pero en local, sin usar ningún dominio. GRACIAS