尽管有MSDN的解决方法,哈希不再适用于.Net 4.0

时间:2010-08-09 07:47:04

标签: asp.net hash sqlmembershipprovider sha machinekey

我在生产中有一个使用SqlMembershipProvider且具有指定机器密钥的现有应用程序:

<machineKey validationKey="..." decryptionKey="..." 
            validation="SHA1" decryption="AES"/>

目前在.Net 2.0 AppPool下运行。

我正在编写一个必须使用现有数据库的新应用程序,我有一个备份。我正在尝试让SqlMembershipProvider使用它(它确实如此)但我无法获得已知的用户名/密码。此帐户在prod中工作,密码哈希和salt在两个数据库(prod和我的)上都是相同的。但是,在SqlMembershipProvider将数据库中的密码与输入的哈希密码进行比较时,它们不同。

本文建议使用.Net 4.0中ASP.Net中的默认哈希算法进行更改: http://www.asp.net/learn/whitepapers/aspnet4/breaking-changes

但是我已经按照建议指定了一个机器密钥。此外,我已经删除了.Net 4.0组件并将其删回到3.5(这是CLR 2)并且输入密码的哈希值仍然相同。

此外,我尝试将这个新的临时应用程序重新部署到相同的服务器生产中,并且仍然无法登录(尽管我无法验证它是否因密码哈希不匹配而失败)。

我还可以在这尝试什么?

2 个答案:

答案 0 :(得分:2)

您需要在web.config中指定成员资格提供程序的hashAlgorithmType,因为默认情况已随.net 4更改。

您想要的值很可能是SHA1。

有关详细信息,请参阅以下页面:http://geekswithblogs.net/DavidHoerster/archive/2010/06/15/asp.net-membership-password-hash----.net-3.5-to-.net-4.aspx

答案 1 :(得分:0)

首先将生产应用程序复制到dev / test并在那里运行它以查看它是否按预期工作。 如果是,请继续升级项目以在.NET 4.0下运行,但不要修改任何其他代码(即不要尝试使其与SQLMembershipProvider一起使用) - 重新测试应用程序 如果可行的话,你知道这不是一个环境问题,而且它不是一个.NET突破性的变化问题,这会导致代码中的某些内容无法正常工作。我的猜测是你在新应用程序中使用的散列算法与旧应用程序中使用的散列算法不同。您是否在旧应用程序中使用密码?您是否在新应用程序中使用相同的盐?