Asp.net Core PasswordHasher<T> 问题
Asp.net Core PasswordHasher<T> issue
我需要在数据库中存储用户名和密码。密码显然应该加密。我们确实有一些其他网站用来加密密码的旧代码,但我不确定这是否安全。
我正在考虑使用 Asp.net Core PasswordHasher class。
我是这样使用的:
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 是否以任何方式绑定到机器?应用程序将 运行 在网络场中,因此它应该独立于机器并在场中的所有机器上进行验证。
这是存储密码的加密安全方式吗?
这是设计使然;每个散列密码都有一个随机盐。
这可以防止攻击者查看用户是否具有相同的密码。
- 每个散列都有一个加密安全盐。
- 盐被添加到散列中。
- 它没有以任何方式链接到机器。
在引擎盖下它使用 PBKDF2、SHA256 和 10,000 次迭代,除非您使用 V2 兼容性(除非必须,否则不要使用 V2 兼容性)
如果您不想引入 Identity,您可以使用它调用的 raw function,但您应该坚持相同的算法和迭代计数。
我需要在数据库中存储用户名和密码。密码显然应该加密。我们确实有一些其他网站用来加密密码的旧代码,但我不确定这是否安全。
我正在考虑使用 Asp.net Core PasswordHasher class。
我是这样使用的:
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 是否以任何方式绑定到机器?应用程序将 运行 在网络场中,因此它应该独立于机器并在场中的所有机器上进行验证。
这是存储密码的加密安全方式吗?
这是设计使然;每个散列密码都有一个随机盐。
这可以防止攻击者查看用户是否具有相同的密码。
- 每个散列都有一个加密安全盐。
- 盐被添加到散列中。
- 它没有以任何方式链接到机器。
在引擎盖下它使用 PBKDF2、SHA256 和 10,000 次迭代,除非您使用 V2 兼容性(除非必须,否则不要使用 V2 兼容性)
如果您不想引入 Identity,您可以使用它调用的 raw function,但您应该坚持相同的算法和迭代计数。