c# - ASP.NET 哈希 PW + 盐混淆

标签 c# asp.net encryption cryptography

我正在关注此处的 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/

相关文章:

ssl - webroot 不会检测 Let's Encrypt 证书创建的根路径

c# - Quit() 使 Access 暂时可见

c# - 为什么 visual studio 不添加链式引用?

C# - 泛型类中的方法,对 T 有额外的约束

asp.net - 无法加载文件或程序集 'log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821'

c# - EF : detach vs. 预加载与 noTracking

c# - 处理从 C# 服务器返回的 SAFEARRAY

asp.net - Crystal Report直接保存为PDF,而不是查看

javascript - 如何在 Node.JS 中加载加密私钥

android - 加密 Realm 数据库