我正在关注此处的 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.连接salt和纯文本pwd 2. 使用 sha1 创建哈希通行证 3.再次将盐与原来含有盐的散列密码连接起来???
第 3 步背后的原因是什么? 我发现了一个与 MSDN 中其他地方相同的函数,并且省略了最后一个 concat。
我只是不明白为什么 MSDN 版本有最后一个 concat 操作。
最佳答案
它使用散列密码存储盐,以便您可以简单地从配置文件(或存储它的任何位置)中提取整个内容,从末尾取出盐,用它散列传入的密码,然后比较结果到配置中的散列密码。如果您不在配置中存储带有哈希密码的盐,则必须将其存储在其他位置,并在执行测试时从那里提取它以对传入密码进行哈希处理。由于 SHA1 是固定的 160 位(20 字节),因此只需跳过配置中哈希密码的前 20 个字符即可轻松获取盐。
关于c# - ASP.NET 哈希 PW + 盐混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2194731/