none
Ayuda con MD5 en winx32 y winx64 RRS feed

  • Debate general

  • Hola a todos, quien me hecha una mano con lo siguiente, tengo un sistema que genera un md5 con el siguiente código:

        Public Function Encriptar_MD5(ByVal p_strValor As String) As String
            Dim md As MD5 = MD5CryptoServiceProvider.Create
            Dim hash() As Byte
            Dim strMD5 As String = ""
            Try
                Dim enc As ASCIIEncoding = New ASCIIEncoding
                Dim buffer() As Byte = enc.GetBytes(p_strValor)
                hash = md.ComputeHash(buffer)
                For Each b As Byte In hash
                    strMD5 &= b.ToString("X2")
                Next
            Catch ex As Exception
                strMD5 = "00001"
            End Try
            Return strMD5
        End Function

    Todo funciona correctamente, el dilema es el siguiente, actualmente funciona en un WS2003x32 y genera un MD5 y todo perfecto, pero ahora que la solcuión lo puse en un WS2012R2x64 me genera otro MD5, esto quiere decir que la misma cadena de entrada genera diferentes salidas dependiente del sistema operativo (bueno eso es la unica idea que tengo), entonces como puedo hacer para que el algoritmo me genera el mismo MD5 que me genera en el WS2003x32 pero corriendo en un WS2012R2x64?

    Gracias de antemano, y saludos cordiales a todos.




    Roy Sillerico

    jueves, 8 de septiembre de 2016 1:30

Todas las respuestas

  • Es rarísimo que te salgan valores distintos. Tal como lo tienes, debería salirte el mismo valor en x86 y x64. ¿Has probado a seguir la ejecución con el debugger (o a instrumentar el código) para ver dónde se produce la discrepancia? Es decir, verificar en los dos sistemas si a la subrutina le llega el mismo string, o si el Asciiencoding genera diferentes bytes, o si el ComputeHash genera un distinto binario, o si la concatenación en hexadecimal produce resultados diferentes. A ver si aislando el problema sobre una operación concreta nos da más pistas para seguir investigando o para buscar una alternativa.

    Editado: Una idea que se me ocurre: ¿No será que en el string llega algún carácter que no sea ASCII (es decir, con un código mayor que 127)? Si fuera así, los resultados del AsciiEncoding podrían ser distintos.

    jueves, 8 de septiembre de 2016 6:28
  • Tendría algo que ver que la version que esta corriendo en x86 es en .net 1.1 y la que esta corriendo en x64 es .net 2.0???

    Roy Sillerico

    jueves, 8 de septiembre de 2016 13:19
  • El cálculo del MD5 en teoría debería dar igual en todas las versiones del Framework. En cambio, por ejemplo, el comportamiento del ASCIIEncoding en caso de encontrar un carácter no-Ascii sí que podría variar.
    jueves, 8 de septiembre de 2016 19:03