Asp.net Core PasswordHasher<T> issue

本文关键字:gt issue net lt PasswordHasher Asp Core | 更新日期: 2023-09-27 18:15:47

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

我正在考虑使用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 farm中运行,因此它应该是机器独立的,并且可以在farm中的所有机器上进行验证。

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

Asp.net Core PasswordHasher<T> issue

  • 每个散列都有一个加密安全盐。
  • 在hash中添加盐。
  • 没有以任何方式链接到机器。

在底层,它使用PBKDF2, SHA256和10,000次迭代,除非你使用V2兼容性(除非你必须使用V2兼容性)

您可以使用它调用的原始函数,如果您不想拉入Identity,但您应该坚持使用相同的算法和迭代计数。

这是设计;每个散列密码都有一个随机盐。

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