【问题标题】:Hashing no longer works in .Net 4.0 despite MSDN workarounds尽管有 MSDN 变通方法,但散列在 .Net 4.0 中不再有效
【发布时间】:2011-02-02 03:33:30
【问题描述】:

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

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

目前在 .Net 2.0 AppPool 下运行。

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

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

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

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

我还能在这里尝试什么?

【问题讨论】:

    标签: asp.net hash sqlmembershipprovider sha machinekey


    【解决方案1】:

    您需要在 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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 2014-02-24
        • 2012-09-05
        • 1970-01-01
        • 2014-07-10
        • 1970-01-01
        • 2023-03-29
        • 1970-01-01
        • 2012-03-14
        • 1970-01-01
        相关资源
        最近更新 更多