Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Asp.net核心密码哈希器<;T>;问题_C#_Asp.net Core - Fatal编程技术网

C# Asp.net核心密码哈希器<;T>;问题

C# Asp.net核心密码哈希器<;T>;问题,c#,asp.net-core,C#,Asp.net Core,我需要在数据库中存储用户名和密码。密码显然应该加密。我们确实有一些其他网站用来加密密码的旧代码,但我不确定这是否安全 我正在研究使用Asp.net核心PasswordHasher类 我使用它的方式如下: PasswordHasher<string> pw = new PasswordHasher<string>(); string s1 = pw.HashPassword("Bob", "Apple"); string s2 = pw.HashP

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

我正在研究使用Asp.net核心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");
PasswordHasher pw=newpasswordhasher();
字符串s1=pw.HashPassword(“Bob”、“Apple”);
字符串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服务器场中运行,因此它应该是独立于机器的,并跨服务器场中的所有机器进行验证


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

这是出于设计;每个哈希密码都有一个随机的salt

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

  • 每个散列都有一个加密安全的salt
  • 盐是在肉馅里加上的
  • 它没有以任何方式连接到机器
在引擎盖下,它使用PBKDF2,使用SHA256和10000次迭代,除非您使用V2兼容性(除非必须,否则不要使用V2兼容性)


如果您不想引入标识,您可以使用it调用,但您应该坚持使用相同的算法和迭代计数。

关于原始函数调用:我使用ASP.NET核心数据保护堆栈创建了一个独立(不依赖标识)密码哈希器:。那么,我说的对吗,使用OP中的示例,我们只需要存储散列?我一直在读不同的博客,那里也有储存盐的例子。这不再是最佳做法吗?谢谢