2011-02-08 51 views
2

因此,我是David Hayden在他的博客上发布的方法(http://davidhayden.com/blog/dave/archive/2004/02/16/157。 aspx)创建一个salt并通过获取用户的原始密码和生成的salt并使用SHA1对值进行散列来散列用户的密码。ASP.NET:SHA1 +多个服务器上的盐密码散列

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

该网站目前是负载平衡,所以我想知道如果产生的哈希值将是相同的两台服务器。

这里的代码张贴在大卫·海登的博客摘录:

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"); 
+0

不要将盐限制为ASCII字符。 – SLaks 2011-02-08 19:09:29

+1

我喜欢`Rfc2898DeriveBytes`与每个用户和每个应用程序salt。 – CodesInChaos 2011-02-08 19:10:26

回答

3

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

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

1

此方法将只使用传递给它的参数。
别担心,它会工作。