Asp.net Core PasswordHasher <t>问题

时间:2016-10-31 19:59:22

标签: c# asp.net-core

我需要在数据库中存储用户名和密码。密码显然应该加密。我们确实有一些旧的代码,我们的其他一些网站用来加密密码,但我不确定这是否安全。

我正在研究使用Asp.net Core PasswordHasher类。

我按如下方式使用它:

    PasswordHasher<string> pw = new PasswordHasher<string>();

    string s1 = pw.HashPassword("Bob", "Apple");
    string s2 = pw.HashPassword("Bob", "Apple");

    var v1 = pw.VerifyHashedPassword("Bob", s1, "Apple");
    var v2 = pw.VerifyHashedPassword("Bob", s2, "Apple");

v1和v2都是成功的,但由于某些原因,s1和s2不相等(也许随机盐?)。

PasswordHasher是否以任何方式绑定到计算机上?应用程序将在Web场中运行,因此它应与计算机无关,并在服务器场中的所有计算机上进行验证。

这是一种存储密码的加密安全方式吗?

2 个答案:

答案 0 :(得分:6)

  • 每个哈希都有一个加密安全的盐。
  • 盐被添加到哈希。
  • 它没有以任何方式链接到机器。

引擎盖下它使用PBKDF2,使用SHA256和10,000次迭代,除非你使用V2兼容性(除非你必须使用V2兼容性)

如果你不想引入Identity,你可以使用它调用的raw function,但你应该坚持使用相同的算法和迭代计数。

答案 1 :(得分:2)

这是设计上的;每个哈希密码都有一个随机盐。

这可以防止攻击者查看用户是否拥有相同的密码。