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