相同的代码在 .net core 和 .net 4.7.2 中给出不同的结果
Same code gives different result in .net core and .net 4.7.2
下面是获取字符串Md5值的C#代码
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();
}
}
}
如果我在 .Net 4.72 上编译它会给出
md5="b5d0f17bf46f869abf8d8f51156126b7"
如果我在 .Net core 3.0 上编译它会给出
md5="96af5cbab2ae75384e0f46a961dcbc4e"
怎么了,为什么结果不同???
有人可以帮助我吗?
检查
var md5val = md5(urlPart, Encoding.Default);
因为在 .net core 和 系统处于活动状态的情况下,Encoding.Default
始终是 Utf-8 .net framework.
中的代码页
https://docs.microsoft.com/en-us/dotnet/api/system.text.encoding.default?view=netframework-4.8
下面是获取字符串Md5值的C#代码
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();
}
}
}
如果我在 .Net 4.72 上编译它会给出
md5="b5d0f17bf46f869abf8d8f51156126b7"
如果我在 .Net core 3.0 上编译它会给出
md5="96af5cbab2ae75384e0f46a961dcbc4e"
怎么了,为什么结果不同???
有人可以帮助我吗?
检查
var md5val = md5(urlPart, Encoding.Default);
因为在 .net core 和 系统处于活动状态的情况下,Encoding.Default
始终是 Utf-8 .net framework.
https://docs.microsoft.com/en-us/dotnet/api/system.text.encoding.default?view=netframework-4.8