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:
(http://i.imgur.com/aHfVQxN.png)
Cuando HelThunk en md5 es: 87b2699fb1fb35b5dc6dea86310c1b82
Source:
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 ClassUn saludo y disculpar la ignorancia
Hola, en todas la funciones retorna en codificado en Base64, prueba de esta forma:
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:
' 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:
Dim md5 As String = ComputeHashOfString(Of MD5CryptoServiceProvider)("HelThunk")
Dim sha1 As String = ComputeHashOfString(Of SHA1CryptoServiceProvider)("HelThunk")
Dim sha256 As String = ComputeHashOfString(Of SHA256CryptoServiceProvider)("HelThunk")
You are not allowed to view links.
You are not allowed to view links.
Register or Login or You are not allowed to view links.
Register or Login
' 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