我们正在将用户身份验证从提供的.NET实现迁移到我们自己的系统中。
我们希望能够支持aspNet_Membership表中存在的旧密码。
密码和Salt驻留在该表中,因此从理论上讲,我们可以重新计算SqlMembershipProivder使用的散列。
然而,我似乎找不到任何描述正在使用的算法的东西。检查成员资格提供程序告诉我,它使用HMACSHA256来计算散列。
然而,存储的口令散列是20字节长,这告诉我它们必须做的不仅仅是简单地计算口令和盐的sha256散列。
会员资格提供者会不会是在撒谎?它是在幕后使用SHA1还是RIPEMD?
或者,如果我可以访问他们正在使用的加密提供商,我可以只传递旧密码和盐到其中……我不一定需要重新发明轮子。
发布于 2015-12-15 10:36:48
是的,成员资格类可能会说谎。SqlMembershipProvider似乎必须具有passwordCompatMode=Framework40属性,才能实际使用ASP.NET 4中添加的散列和加密选项。如果没有该属性,它将使用旧的兼容模式,该模式忽略成员身份散列算法,默认为SHA1。创建SqlMembershipProvider的一个实例,并查看调试器中的_LegacyPasswordCompatibilityMode属性以及私有s_HashAlgorithm成员(该成员仅在散列密码后设置)。它们可能会分别显示"Framework20“和"SHA1”。谢谢你的问题,它帮助我找到了答案。
以下是我的问题和答案,以及更多细节:https://stackoverflow.com/a/34280119/263832
发布于 2014-11-01 00:31:15
如果密码格式是1,那么你不能重新计算哈希值--这是一个不可逆的算法。
您可以更改每个用户的密码格式,并设置新密码。
https://stackoverflow.com/questions/22512269
复制相似问题