C# ASP.NET哈希PW';s+;盐混乱

C# ASP.NET哈希PW';s+;盐混乱,c#,asp.net,encryption,cryptography,C#,Asp.net,Encryption,Cryptography,以下是MSDN的文章: 我的困惑在于功能: private static string CreatePasswordHash(string pwd, string salt) { string saltAndPwd = String.Concat(pwd, salt); string hashedPwd = FormsAuthentication.HashPasswordForStoringInConfigFile(

以下是MSDN的文章:

我的困惑在于功能:

private static string CreatePasswordHash(string pwd, string salt)
{
  string saltAndPwd = String.Concat(pwd, salt);
  string hashedPwd = 
        FormsAuthentication.HashPasswordForStoringInConfigFile(
                                             saltAndPwd, "SHA1");
  hashedPwd = String.Concat(hashedPwd, salt);
  return hashedPwd;
}
我的理解是: 1.concat盐和纯文本pwd 2.使用sha1创建了散列传递 3.用最初含有盐的杂碎pwd再次煮盐

第三步背后的原因是什么? 我发现了一个与MSDN相同的函数,它省略了最后一个concat


我只是不明白为什么MSDN版本中有最后一个concat操作

它使用散列密码存储salt,这样您就可以简单地从配置文件(或存储它的任何地方)提取整个内容,从末尾抓取salt,用它散列传入密码,并将结果与配置中的散列密码进行比较。如果在配置中没有使用哈希密码存储salt,则必须将其存储在其他位置,并在执行测试时从那里提取它以哈希传入密码。由于SHA1是一个固定的160位(20字节),只需跳过配置中散列密码中的前20个字符,就可以轻松获取salt