我正在尝试使用默认的asp.net表和提供程序将用户从Joomla数据库迁移到自定义数据库。从理论上讲,我可以通过更改web.config将散列类型从默认(SHA)更改为MD5,但是,当登录时报告无效的密码(或用户名,但我怀疑是这样的)。检查aspnet_Membership表和Joomla_users表,我可以看到每个用户都有相同的password和Salt值(Joomla1.7实际上将其存储为password:salt,但这很容易分成两个字段)。两者似乎都是base64格式的,并且通过ASP默认登录控件添加一个用户会导致新用户的两个类似的字段(尽管盐是随机的,所以我不能与相同的已知密码进行比较)。
下面是我的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。
发布于 2013-05-20 04:56:32
我想我已经解决了。在Joomla中,通过PHP代码将md5应用于pass+salt。在SqlMembershipProvider.cs中,它被应用于salt+pass。
SqlMembershipProvider.cs是通过SQLMembershipProvider - source code找到的-也许不是真正的来源,但我看不出有什么理由在这一特定方面与真正的来源不同。
https://stackoverflow.com/questions/16639257
复制相似问题