[SOLUCIONADO] Generar Hash en VB (MD5, SHA1, SHA5)

Iniciado por hakiour, Diciembre 16, 2016, 05:40:36 PM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Diciembre 16, 2016, 05:40:36 PM Ultima modificación: Diciembre 17, 2016, 10:29:30 AM por HelThunk
Buenas,
Estoy intentado generar en vb los respectivos hash según la entrada, el problema es que el resultado que obtengo no es real. Es decir, si se compara con cualquier soft que haga la misma función, el resultado es diferente, aquí mi salida:


Cuando HelThunk en md5 es: 87b2699fb1fb35b5dc6dea86310c1b82

Source:
Código: vb
Imports System.Security.Cryptography
Imports System.Text
Public Class Form1
    'MD5
    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
    'SHA1
    Function generarSHA1(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 SHA1Managed()

        ' 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
    'SHA5
    Function generarSHA5(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()

        ' 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
    Private Sub tboriginal_TextChanged(sender As Object, e As EventArgs) Handles tboriginal.TextChanged
        'Obtengo el hash a partir del texto ingresado en la casilla tboriginal
        md5tbresultado.Text = generarMD5(tboriginal.Text)
        sha1tbresultado.Text = generarSHA1(tboriginal.Text)
        sha5tbresultado.Text = generarSHA5(tboriginal.Text)
    End Sub
End Class


Un saludo y disculpar la ignorancia

Diciembre 17, 2016, 09:34:59 AM #1 Ultima modificación: Diciembre 17, 2016, 09:37:09 AM por fudmario
Hola, en todas la funciones retorna en codificado en Base64, prueba de esta forma:


Código: vbnet

    Public Function HashMd5(ByVal str As String) As String
        Dim enc As Encoding = Encoding.UTF8
        Using md5 As New MD5CryptoServiceProvider()
            Dim data As Byte() = enc.GetBytes(str)
            Dim hash As Byte() = md5.ComputeHash(data)
            Dim sb As New StringBuilder(hash.Length*2)
            For Each b As Byte In hash
                sb.Append(b.ToString("x2"))
            Next
            Return sb.ToString()
        End Using
    End Function


De forma generica podrias usar esta función:

Código: vbnet

' parte de la Libreria ElektroKit
     Public Function ComputeHashOfString(Of T As HashAlgorithm)(ByVal str As String,
                                                                              Optional ByVal enc As Encoding = Nothing) As String
            If (enc Is Nothing) Then
                enc = Encoding.Default
            End If
            Using algorithm As HashAlgorithm = DirectCast(Activator.CreateInstance(GetType(T)), HashAlgorithm)
                Dim data As Byte() = enc.GetBytes(str)
                Dim hash As Byte() = algorithm.ComputeHash(data)
                Dim sb As New StringBuilder(capacity:=hash.Length * 2)
                For Each b As Byte In hash
                    sb.Append(b.ToString("X2"))
                Next
                Return sb.ToString.ToLower()
            End Using

        End Function



Ejemplo de Uso:

Código: vbnet


Dim md5 As String = ComputeHashOfString(Of MD5CryptoServiceProvider)("HelThunk")
Dim sha1 As String = ComputeHashOfString(Of SHA1CryptoServiceProvider)("HelThunk")
Dim sha256 As String = ComputeHashOfString(Of SHA256CryptoServiceProvider)("HelThunk")



No tienes permitido ver enlaces. Registrate o Entra a tu cuenta
Código: vbnet

' parte de la Libreria ElektroKit
     Public Function ComputeHashOfString(Of T As HashAlgorithm)(ByVal str As String,
                                                                              Optional ByVal enc As Encoding = Nothing) As String
            If (enc Is Nothing) Then
                enc = Encoding.Default
            End If
            Using algorithm As HashAlgorithm = DirectCast(Activator.CreateInstance(GetType(T)), HashAlgorithm)
                Dim data As Byte() = enc.GetBytes(str)
                Dim hash As Byte() = algorithm.ComputeHash(data)
                Dim sb As New StringBuilder(capacity:=hash.Length * 2)
                For Each b As Byte In hash
                    sb.Append(b.ToString("X2"))
                Next
                Return sb.ToString.ToLower()
            End Using

        End Function


Muchas gracias, funciona a la perfección  ;). Aunque me gustaría entender como funciona.
Un saludo