'////////////////////////////////////////////////////////// '// CRIPTOGRAFIA - Técnicas de desarrollo para profesionales '////////////////////////////////////////////////////////// '// Capítulo 4: Criptografía en entornos .NET '// Sección 4.5: Codificación de funciones de una vía yhash '////////////////////////////////////////////////////////// '// Listado 4.8: Ejemplo para el computo y verificación '// del hashing MD5 de una cadena de caracteres. Versión '// VB.NET. '////////////////////////////////////////////////////////// Imports System Imports System.Security.Cryptography Imports System.Text Module EjemploMD5 ' Obtener el hash de una cadena y devolverlo también ' como una cadena, de 32 caracteres (hexadecimal) Function getMd5Hash(ByVal input As String) As String ' Crear una nueva instancia del objeto MD5CryptoServiceProvider Dim md5Hasher As New MD5CryptoServiceProvider() ' Convertir la cadena de entrada a un array de bytes y computar el hash Dim data As Byte() = md5Hasher.ComputeHash(Encoding.Default.GetBytes(input)) ' Crear un nuevo Stringbuilder para armar la cadena resultado Dim sBuilder As New StringBuilder() ' Iterar sobre cada byte del resultado del hashing y convertirlo ' a una cadena de caracteres (hexadecimal) Dim i As Integer For i = 0 To data.Length - 1 sBuilder.Append(data(i).ToString("x2")) Next i ' Devolver la cadena de caracteres resultado Return sBuilder.ToString() End Function ' Verificar el hash de un string Function verifyMd5Hash(ByVal input As String, ByVal hash As String) As Boolean ' Obtener el hash de la entrada Dim hashOfInput As String = getMd5Hash(input) ' Crear un StringComparer y comparar ambos resultados Dim comparer As StringComparer = StringComparer.OrdinalIgnoreCase If 0 = comparer.Compare(hashOfInput, hash) Then Return True Else Return False End If End Function Sub Main() ' Cadena de entrada de prueba Dim source As String = "Contenido de prueba" ' Obtener el resultado del hash Dim hash As String = getMd5Hash(source) ' Imprimir resultado Console.WriteLine("El resultado del hash MD5 de " + source + " es: " + hash + ".") Console.WriteLine("Verificando el resultado del hash...") ' Imprimir resultado de comparación If verifyMd5Hash(source, hash) Then Console.WriteLine("Ambos resultados coinciden.") Else Console.WriteLine("Los resultados no coinciden.") End If End Sub End Module