复制 SqlMembershipProvider 密码哈希值

4
我们正在将用户身份验证从提供的.NET实现迁移到我们自己的系统。
我们希望能够支持存在于aspNet_Membership表中的旧密码。
该表中存储了密码和Salt,因此理论上我们可以重新计算SqlMembershipProivder正在使用的哈希值。
然而,我找不到任何描述正在使用的算法的内容。检查成员资格提供程序告诉我它正在使用HMACSHA256来计算哈希值。
然而,存储的密码哈希值为20个字节,这告诉我它们必须做更多的工作,而不仅仅是计算密码和salt的sha256哈希值。
成员资格提供程序会撒谎吗?它是否在底层使用SHA1或RIPEMD?
或者,如果我可以访问他们正在使用的加密提供程序,我就可以将旧密码和Salt传递给它……我不一定需要重复造轮子。

谢谢您注意到哈希长度!我整天都在尝试复制哈希。SHA1哈希是20个字节。您的观察引导我尝试使用SHA1作为手动哈希算法。果然,它与我的MembershipProvider生成的HMACSHA256(Membership.HashAlgorithmType = "HMACSHA256")匹配!有进展了。现在唯一的问题是,“到底是怎么回事?” - xr280xr
2个回答

1
是的,Membership类可能存在问题。似乎SqlMembershipProvider必须具有passwordCompatMode=Framework40属性才能实际使用在ASP.NET 4中添加的哈希和加密选项。如果没有这个属性,它将使用一个遗留的兼容模式,忽略Membership哈希算法,并默认为SHA1。创建SqlMembershipProvider的实例并在调试器中查看_LegacyPasswordCompatibilityMode属性以及私有的s_HashAlgorithm成员(只有在它哈希密码后才会设置)。它们可能会显示"Framework20"和"SHA1"。感谢您的提问,它帮助我找到了答案。
以下是我更详细的问题和回答: https://dev59.com/kJLea4cB1Zd3GeqPxQsg#34280119

-2
如果密码格式为1,则无法重新计算哈希值 - 这是一种不可逆的算法。
您可以随时更改每个用户的密码格式并设置新密码。

1
重新计算哈希值并不是将其反转。如果无法重新计算哈希值,则该哈希值就没有用处。 - xr280xr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接