我正在关注位于此处的MSDN文章:http://msdn.microsoft.com/en-us/library/aa302398.aspx
我的困惑在于功能:
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.盐和普通文本汇总 2.使用sha1创建一个散列传递 3.再次使用最初含有盐的哈希pwd将盐再次加入盐中
第3步背后的原因是什么? 我找到了一个与其他MSDN相同的功能,它省略了最后一个连接。
我只是不明白为什么MSDN版本在那里有最后的concat操作。
答案 0 :(得分:3)
它使用散列密码存储salt,以便您可以从配置文件(或存储它的任何位置)简单地提取整个内容,从最后获取盐,使用它散列输入密码,并比较结果来自配置的哈希密码。如果您没有在配置中使用散列密码存储salt,则必须将其存储在其他位置并从中提取它以在执行测试时散列传入密码。由于SHA1是固定的160位(20字节),因此只需在配置中跳过散列密码中的前20个字符即可轻松获取盐。