Asp.net core .NETCore PasswordHasher.HashPassword不';t使用TUser用户,但为什么要包含在方法签名中?

Asp.net core .NETCore PasswordHasher.HashPassword不';t使用TUser用户,但为什么要包含在方法签名中?,asp.net-core,.net-core,Asp.net Core,.net Core,不使用TUser user,但为什么要包含在方法签名中 谢谢 类实现了接口IPasswordHasher,该接口定义了方法字符串HashPassword(TUser user,string password)。正如您所注意到的,PasswordHasher.HashPassword不使用TUser,但另一个实现可以使用。HashPassword生成一个随机salt,并使用它直接对密码进行哈希运算,除了密码之外,没有任何外部数据。通过观察,它似乎是一个很好的实现 您可以构建一个MyPassword

不使用TUser user,但为什么要包含在方法签名中

谢谢

类实现了接口
IPasswordHasher
,该接口定义了方法
字符串HashPassword(TUser user,string password)
。正如您所注意到的,
PasswordHasher.HashPassword
不使用
TUser
,但另一个实现可以使用。HashPassword生成一个随机salt,并使用它直接对密码进行哈希运算,除了密码之外,没有任何外部数据。通过观察,它似乎是一个很好的实现

您可以构建一个
MyPasswordHasher
,它为每个用户提供不同的salt,并将密码的salt与密码分开保存。在这种情况下,您需要一个包含盐的
TUser
对象。几年前,有人问它,将散列计算为
散列(用户名+密码)
是否是一个好主意。。。要像这样计算散列,您需要一个
TUser
对象,该对象具有
用户名
与Microsoft解决方案相比,我们将忽略该解决方案的质量)

我在一些站点看到的另一个常见实现是在用户表中有一列,其中包含用于哈希密码的“协议”的“版本”。。。这样,如果发现散列是弱的,可以设计一个新的“协议”,这个“版本”说明散列是以什么方式计算的

因此,Microsoft程序员实现了
IPasswordHasher
接口,以与这种类型的哈希兼容。他们没有实施这些计划,但他们公开了这一可能性

(作为旁注,Microsoft版本的
PasswordHasher
生成一个“打包”字符串,其中包含版本、密钥派生函数信息、salt和哈希值)

PasswordHasher
类实现了定义方法
string HashPassword的接口
IPasswordHasher
(t用户,字符串密码)
。正如您所注意到的,
PasswordHasher.HashPassword
不使用
TUser
,但另一个实现可以使用它。
PasswordHasher.HashPassword
生成一个随机salt,并使用它直接对密码进行哈希运算,除了密码之外没有任何外部数据。通过查看它似乎是一个很好的实现离子

您可以构建一个
MyPasswordHasher
,该程序为每个用户提供不同的salt,并将密码的salt与密码分开保存。在这种情况下,您需要一个
TUser
对象来包含salt。几年前,有人问它,将散列计算为
散列(用户名+密码)是否是一个好主意
…要像那样计算散列,您需要一个
TUser
对象,该对象具有
用户名
与Microsoft解决方案相比,我们将忽略该解决方案的质量)

我在一些网站上看到的另一个常见实现是在用户表中有一列,其中包含用于哈希密码的“协议版本”…这样,如果发现哈希较弱,可以设计一个新的“协议”,该“版本”说明哈希是如何计算的

因此,微软程序员实现了
IPasswordHasher
接口以兼容这种类型的散列。他们没有实现它们,但他们允许了这种可能性


(作为旁注,Microsoft版本的
PasswordHasher
生成一个“打包”字符串,其中包含版本、密钥派生函数信息、salt和哈希值)

因为接口有它。您可以检查此github问题:因为接口有它。您可以检查此github问题: