ASP.NET:多个服务器上的SHA1 + Salt密码哈希

时间:2011-02-08 19:05:31

标签: c# asp.net encryption sha1 password-hash

所以,我是David Hayden在他的博客(http://davidhayden.com/blog/dave/archive/2004/02/16/157.aspx)上发布的方法来创建一个salt并通过以下方式创建用户密码获取用户的原始密码和生成的salt,并使用SHA1来散列值。

然后我将salt和哈希密码存储在数据库中。

该网站目前是负载均衡的,所以我想知道两个服务器的结果哈希值是否相同。

以下是David Hayden博客上发布的代码片段:

private static string CreateSalt(int size)
  {
   //Generate a cryptographic random number.
   RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
   byte[] buff = new byte[size];
   rng.GetBytes(buff);

   // Return a Base64 string representation of the random number.
   return Convert.ToBase64String(buff);
  }

private static string CreatePasswordHash(string pwd, string salt)
  {
   string saltAndPwd = String.Concat(pwd, salt);
   string hashedPwd =
    FormsAuthentication.HashPasswordForStoringInConfigFile(
    saltAndPwd, "sha1");

   return hashedPwd;
  }

我问的原因是此代码使用代码段:

FormsAuthentication.HashPasswordForStoringInConfigFile(
        saltAndPwd, "sha1");

3 个答案:

答案 0 :(得分:3)

我认为你在这里提出的关键问题是SHA1算法是否与运行的服务器相同。在这种情况下答案是肯定的。

据推测,您将生成的盐存储在所有服务器都可以访问它的地方,以及密码哈希?因此,用于生成salt的方法不需要在服务器之间保持一致。

答案 1 :(得分:1)

此方法仅使用传递给它的参数 别担心;它会起作用。

答案 2 :(得分:0)

“要解决此问题,验证密钥和decryptionKey值必须在Web场中的所有计算机上都相同。” http://msdn.microsoft.com/en-us/library/ff647070.aspx#pagexplained0002_webfarmscenarios