VerifyHashedPassword() 使用什么算法?

What algorithm does VerifyHashedPassword() use?

提问人:tharpa 提问时间:11/17/2023 最后编辑:tharpa 更新时间:11/17/2023 访问量:55

问:

在 C# 中,有一个名为 .这不需要哈希算法。在 T-SQL 中,有一种方法,它要求传递哈希算法。VerifyHashedPassword()HashBytes()

我正在更新程序,需要验证用户的密码。我有哈希密码表,但我不知道使用了什么算法,只知道 C# 代码使用 VerifyHashedPassword,它不采用算法参数。

我可以将什么算法传递给 HashBytes() 以匹配 VerifyHashedPassword 使用的方法?

编辑:很明显,建议的问题没有回答我的问题。很难理解为什么有人会认为它确实如此。

C# sql-server t-sql 密码哈希

评论

0赞 Franz Gleichmann 11/17/2023
我推测,它采用在散列的 passwort 中编码的那个。至少如果它被正确实现。
0赞 Charlieface 11/17/2023
这一切都在源 github.com/aspnet/AspNetIdentity/blob/main/src/ 中......看起来像带有 HMAC-SHA 2 位的 PBKDF128
0赞 Charlieface 11/17/2023
这回答了你的问题吗?是否有 PBKDF2 的 SQL 实现?
0赞 tharpa 11/17/2023
@Charlieface 视情况而定。PBKDF2 是 VerifyHashedPassword( ) 使用的算法吗?
0赞 Charlieface 11/17/2023
github.com/aspnet/AspNetIdentity/blob/......

答:

0赞 Joel Coehoorn 11/17/2023 #1

可能无法使用 SQL 方法来复制该过程,因为您不知道盐。如果你确实知道盐,那么现代算法的全部意义在于它们是可调的,而你不知道使用的调谐因子。即使您知道调整因素,更新的可调算法也不受 支持。HashBytes()HashBytes()

但你想要的信息是它使用 Rfc2898DerivedBytes 类型,该类型在文档中包含以下内容:

通过使用基于 HMACSHA1 的伪随机数生成器实现基于密码的密钥派生功能 PBKDF2。

以这种方式散列的密码输出还将包括随机盐作为结果的一部分。然后,获取此值,并将盐(以及任何其他元数据,如调整因子)与此输入值分开,并使用它来复制尝试密码的原始哈希过程。然后它可以比较哈希值以给出有效/无效的结果。VerifyHashedPassword()


我正在更新程序,需要验证用户的密码。我有哈希密码表,但我不知道使用了什么算法,只知道 C# 代码使用 VerifyHashedPassword()

如果可能,应继续使用该过程。密码验证通常不是在数据库本身中完成的

评论

0赞 tharpa 11/17/2023
有一种方法需要盐,一种不需要盐的方法。
0赞 Joel Coehoorn 11/17/2023
如果你指的是同一类中的“HashPassword()”函数,它会生成一个随机盐,然后将其作为结果的一部分包含在内。然后,“验证”方法再次将它们分开,以使用相同的盐和尝试的密码。
0赞 Charlieface 11/17/2023
“密码验证通常不是在数据库本身中完成的”,这并不完全正确。应在客户端对密码进行哈希处理,然后将密码传递到服务器以比较哈希值。