C#哈希密码创建盐问题

时间:2010-06-11 19:02:12

标签: c# security hash

如果我使用这样的东西创造盐:

public class User
    {
        private const int Hash_Salt_Length = 8;
        private byte[] saltBytes = new byte[Hash_Salt_Length];


        public User()
        {
            RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
            rng.GetNonZeroBytes(saltBytes);     
        }
        ....

}

saltBytes个字节数组对于每个会话都是不同的(重新启动应用程序)。如何检查密码以允许用户登录我们的应用程序?

3 个答案:

答案 0 :(得分:8)

您需要将salt与密码哈希一起存储在数据库中。

请注意,您不应该调用GetNonZeroBytes,因为这样可以减少随机性。

答案 1 :(得分:3)

如果每次应用程序重新启动时salt都会更改,则必须将其存储在数据库中(在用户记录中)。

答案 2 :(得分:1)

在您创建用户记录时生成的盐是静态的,并且您将它与用户ID以及密码+ salt的哈希值一起存储。

当用户尝试登录时,您使用ID查找salt,将其与密码相结合,哈希并与存储的哈希进行比较。如果他们匹配,他们就在。

存在盐,以便有权访问您的安全数据库的攻击者无法预先准备密码数据库 - >哈希映射,然后执行简单的反向查找以尝试确定密码。