ASP.NET身份 - 盐在哪里存储?
问题描述:
我创建了一个简单的MVC4应用程序并注册了一个用户。 usrname和密码存储在名为AspNetUsers的表中。该表没有盐场。ASP.NET身份 - 盐在哪里存储?
我明白的方式是当用户登录时;他们输入用户名和密码。盐随后与输入的密码连接并与数据库中的密码进行比较。这是不正确的?即
Hash(PasswordEntered) + Salt = Password in database = authenticated
Hash(PasswordEntered) + Salt <> Password in database = not authenticated
有一个字段名为:aspnetusers.SecurityStamp,但是我的研究告诉我,这不是盐。
更新
刚才我看到斯科特·张伯伦。请参阅以下步骤:
1)用户在注册时输入:Hello123作为密码,Salt(随机生成)为:456,则输入到PasswordHash的密码为:Hello123 + 456 2)尝试登录并输入Hello123(正确)作为密码。 salt(随机生成)为:567.因此,Hello123 + 456与Hello123 + 567进行比较,认证失败。
在这种情况下,用户输入正确的密码并且未通过身份验证。我显然在这里缺少一些基本的东西。
答
你有不正确模式,正确的是
Hash(PasswordEntered + Salt) = hash in database = authenticated
Hash(PasswordEntered + Salt) <> hash in database = not authenticated
供应商对于ASP.net的工作原理是它存储在密码字段Salt + Hash(PasswordEntered + Salt)
的方式。所以当你去测试一个密码时,你只需要在盐分离器之前使用该部分,并将其与分离器之后的部分进行比较。
在我的数据库中的AspNetUsers有一个名为[PasswordHash] –
@federico scamuzzi,谢谢。但是,盐在哪里? – w0051977
那里在taht领域有你的密码...盐渍 –