C# 两个哈希md5代码不返回相同的结果

C# 两个哈希md5代码不返回相同的结果,c#,asp.net,asp.net-core,md5,C#,Asp.net,Asp.net Core,Md5,我有两段代码来生成密码,它们都使用md5哈希算法。我的问题是,尽管这是一个散列算法,但这两个 它们使用不同的方法,但输出不同。两者都返回一个32个字符长的字符串,但结果第一个是小写,第二个是大写。 有什么区别?如何将方法2生成的密码转换为方法1 方法1: public static string ConvertToMD5Hash(this string password) { using (var md5 = MD5.Create())

我有两段代码来生成密码,它们都使用md5哈希算法。我的问题是,尽管这是一个散列算法,但这两个 它们使用不同的方法,但输出不同。两者都返回一个32个字符长的字符串,但结果第一个是小写,第二个是大写。 有什么区别?如何将方法2生成的密码转换为方法1

方法1:

public static string ConvertToMD5Hash(this string password)
        {
            using (var md5 = MD5.Create())
            {
                var result = md5.ComputeHash(Encoding.ASCII.GetBytes(password));
                return result.ToHex(false);
            }
        }
方法2:

FormsAuthentication.HashPasswordForStoringInConfigFile(password, "MD5");
更新:

result method 1: 93db94704e31b49b44452ddb5fcada2c

result method 2: 02EF13AE7287E27CF74D5E3F42A7FCB2

十六进制表示不区分大小写(“1A”=“1A”)。考虑您想要哪种表示,小写或大写,并将另一个转换为该表示,或者使比较本身不区分大小写。

至于实际哈希内容的差异,您的问题在于:

Encoding.ASCII.GetBytes(password)
您不应该使用ASCII编码,因为这将为代码点127以上的每个输入字符生成“?”,从而导致与使用正确编码时不同的哈希

FormsAuthentication.HashPasswordForStoringInConfigFile()
,顺便说一下,这是一个很棒的名字,所以:


另外,使用MD5散列存储密码是00年代的一种做法,不应该再使用了。这是不安全的。不要使用您自己的密码哈希,尤其是在您标记了问题ASP.NET核心之后,只用于身份验证和凭据存储。

@CodeCaster:我当然是对的@主持人:OP问有什么区别。如果使用不同的编码有效,则编码会改变字母的大小写。
Encoding.UTF8.GetBytes(password)