重现SqlMembershipProvider密码哈希值

时间:2014-03-19 16:30:00

标签: c# encryption hash sqlmembershipprovider

我们正在将用户身份验证从提供的.NET实现迁移到我们自己的系统。

我们希望能够支持aspNet_Membership表中存在的旧密码。

密码和Salt驻留在该表中,因此理论上我们可以重新计算SqlMembershipProivder正在使用的哈希值。

但是,我似乎找不到任何描述正在使用的算法的内容。 Inferecting Membership provider告诉我它正在使用HMACSHA256来计算哈希值。

但是,存储的密码哈希长度为20个字节,告诉我他们必须做的不仅仅是计算密码和盐的sha256哈希值。

会员提供者可以说谎吗?是否在封面下使用SHA1或RIPEMD?

或者,如果我可以访问他们正在使用的加密提供程序,我可以将旧密码和盐传递给它......我不一定需要重新发明轮子。

2 个答案:

答案 0 :(得分:1)

是的,会员级别可能会撒谎。似乎SqlMembershipProvider必须具有passwordCompatMode=Framework40属性才能实际使用ASP.NET 4中添加的散列和加密选项。如果没有它,它使用遗留兼容模式忽略Membership哈希算法并默认为SHA1 。创建SqlMembershipProvider的实例,并查看调试器中的_LegacyPasswordCompatibilityMode属性以及私有s_HashAlgorithm成员(仅在哈希密码后才设置)。他们可能会向你展示" Framework20"和" SHA1"分别。谢谢你的问题,它帮助我找到答案。

以下是我的问题和答案,详细信息如下:https://stackoverflow.com/a/34280119/263832

答案 1 :(得分:-2)

如果密码格式为1,那么您无法重新计算哈希 - 它是一种不可逆的算法。

您可以随时更改每个用户的密码格式并设置新密码。

相关问题