我正在尝试使用默认的 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。