【问题标题】:Changing SqlMembershipProvider to use MD5, Joomla-style passwords更改 SqlMembershipProvider 以使用 MD5、Joomla 风格的密码
【发布时间】:2023-03-24 08:24:01
【问题描述】:

我正在尝试使用默认的 asp.net 表和提供程序将用户从 Joomla 数据库迁移到自定义数据库。从理论上讲,我可以通过更改 web.config 将哈希类型从默认(SHA)更改为 MD5,但是,在登录时它会报告无效的密码(或用户名,但我怀疑是这样)。检查 aspnet_Membership 表和 Joomla_users 表,我可以看到每个用户都有相同的密码和盐值(Joomla 1.7 实际上将其存储为密码:盐,但这很容易分成两个字段)。两者似乎都是 base64 格式,并且通过 ASP 默认登录控件添加用户会为新用户生成一对类似的字段(尽管我认为 salt 是随机的,所以我无法与相同的已知密码进行比较)。

这是我的 web.config 的摘录:

<system.web>
  <machineKey validation="MD5"/>
  ...
<membership hashAlgorithmType="MD5">
  <providers>
    <clear />
    <add name="AspNetSqlMembershipProvider"
         type="System.Web.Security.SqlMembershipProvider"
         connectionStringName="UserAuth"
         enablePasswordRetrieval="false"
         enablePasswordReset="true"
         requiresQuestionAndAnswer="false"
         requiresUniqueEmail="false"
         maxInvalidPasswordAttempts="5"
         minRequiredPasswordLength="6"
         minRequiredNonalphanumericCharacters="0"
         passwordAttemptWindow="10"
         passwordFormat="Hashed"
         applicationName="/" />
  </providers>
</membership>
</system.web>

我不确定的一件事是它是 md5、Md5 还是 MD5(我在谷歌搜索时在代码示例中看到了后者)。但是,我可以写废话,并且应用程序似乎不会眨眼。

除非没有其他办法,否则我并不特别希望编写自定义会员提供程序。

这里有一些 PHP 将 Joomla 散列密码与作为参数提供给此函数的密码进行比较:

                $user_id = mysql_result($result, 0, 'id');
                $db_password = mysql_result($result, 0, 'password');
                $joomla = &New JConfig;
                list($md5pass, $saltpass) = split(":", $db_password);
                $md5_password = md5($user_password.$saltpass);
                if (strcmp($md5_password, $suppliedpass) == 0)
                {
                    return $user_id;
                }

要么是 ASP 版本忽略了我的 md5 请求,要么它以某种其他方式存储它,或者我没有告诉它正确使用 md5,或者......?我不想告诉 4000 位用户重置他们的密码,尽管我知道这些天不推荐使用 md5。

【问题讨论】:

    标签: asp.net asp.net-mvc-2 md5 joomla1.7


    【解决方案1】:

    我想我解决了。在 Joomla 中,从 PHP 代码中,md5 应用于 pass+salt。在 SqlMembershipProvider.cs 中,它应用于 salt+pass。

    SqlMembershipProvider.cs 是通过 SQLMembershipProvider - source code 找到的 - 可能不是真正的来源,但我认为没有理由在该特定方面与真正的来源不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-23
      • 1970-01-01
      • 1970-01-01
      • 2012-11-26
      • 2013-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多