我需要在数据库中存储用户名和密码。密码显然应该加密。我们确实有一些旧的代码,我们的其他一些网站用来加密密码,但我不确定这是否安全。
我正在研究使用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场中运行,因此它应与计算机无关,并在服务器场中的所有计算机上进行验证。
这是一种存储密码的加密安全方式吗?
答案 0 :(得分:6)
引擎盖下它使用PBKDF2,使用SHA256和10,000次迭代,除非你使用V2兼容性(除非你必须使用V2兼容性)
如果你不想引入Identity,你可以使用它调用的raw function,但你应该坚持使用相同的算法和迭代计数。
答案 1 :(得分:2)
这是设计上的;每个哈希密码都有一个随机盐。
这可以防止攻击者查看用户是否拥有相同的密码。