3

Here is the following C# code to obtain the Md5 value of a string

using System;
using System.Security.Cryptography;
using System.Text;

namespace ConsoleApp1
{
  class Program
  {
    static void Main(string[] args)
    {
        var urlPart = "dd5fad78903da9d3ce4905f8e731d6c4ýundefinedý3780534ý5";
        Console.WriteLine("value= " + urlPart);
        var md5val = md5(urlPart, Encoding.Default);
        Console.WriteLine("md5= " + md5val);
    }

    public static string md5(string value, System.Text.Encoding encoding)
    {
        var buffer = encoding.GetBytes(value);
        //Console.WriteLine("buffer= " + BitConverter.ToString(buffer));

        MD5 md5Hasher = MD5.Create();
        byte[] data = md5Hasher.ComputeHash(buffer);
        StringBuilder sBuilder = new StringBuilder();
        for (int i = 0; i < data.Length; i++)
        {
            sBuilder.Append(data[i].ToString("x2"));
        }
        return sBuilder.ToString();
    }
  }
}

If I compiled on .Net 4.72 it gives

md5="b5d0f17bf46f869abf8d8f51156126b7"

If I compiled on .Net core 3.0 it gives

md5="96af5cbab2ae75384e0f46a961dcbc4e"

What's wrong, why different results ???

Can somebody help me?

Ashkan Mobayen Khiabani
  • 33,575
  • 33
  • 102
  • 171
Rémy
  • 736
  • 1
  • 5
  • 19
  • Assuming you've verified that `Encoding.Default` is the same... Please [edit] to confirm (or better yet - for [MCVE] use fixed encoding like UTF8) – Alexei Levenkov Dec 11 '19 at 20:50
  • Side note: there are much better looking array->hex (https://stackoverflow.com/questions/311165/how-do-you-convert-a-byte-array-to-a-hexadecimal-string-and-vice-versa) – Alexei Levenkov Dec 11 '19 at 20:52

1 Answers1

8

Check

  var md5val = md5(urlPart, Encoding.Default);

since Encoding.Default is always Utf-8 in case of .net core and system's active code page in .net framework.

https://learn.microsoft.com/en-us/dotnet/api/system.text.encoding.default?view=netframework-4.8

Dmitry Bychenko
  • 180,369
  • 20
  • 160
  • 215