急求ecshop网店系统16位MD5密码与32位MD5密码共存登陆方法

2016-07-07 15:03 来源:www.chinab4c.com 作者:ecshop专家



如题,小弟我现在遇到了棘手的问题,我购买ec的主机后安装ecshop

把原来网站的注册会员信息导入到EC注册会员数据库内,但是问题发生了,原来网站的会员登录密码是16位的MD5密码,EC会员登录密码是32位MD5密码,这俩个加密类型不匹配,原来的会员登陆不进去,网上查询了相关内容,发现一篇文章是关于shopex商城系统可以做到16位MD5密码与32位MD5密码共存登陆方法,方案如下:

ShopEx整合中的碰到的16位和32位密码整合问题解决办法。

  1. 在shop/login_act.php中,找到 $ShopInfo->getbyId($INC_SHOPID);这行,
  2. 在后面加入如下代码:把红字改成您自己的数据。
  3. //===============修改开始=================
  4. $my_user= $_POST["username"];
  5. $my_pwd_md5=md5($_POST["passwd"]);//用户提交的密码32位加密
  6. $my_connect_id=mysql_connect("数据库地址","用户名","密码";); //连接数据库
  7. $my_result=mysql_db_query("数据库名","select password from {$GLOBALS["_tbpre"]}mall_member where user='$my_user'";); //取出密码
  8. while($userdb=mysql_fetch_row($my_result)) {
  9. $my_tmp=$userdb[0];
  10. if ($my_tmp==substr($my_pwd_md5,8,16)){
  11. mysql_db_query("数据库名","update {$GLOBALS["_tbpre"]}mall_member set password = '$my_pwd_md5' where user= '$my_user'");//更新32位密码到数据库中
  12. }
  13. }
  14. mysql_close($my_connect_id);
  15. //===============修改结束=================
复制代码
希望各位大侠能够写出ECshop解决16位和32位密码整合问题的办法,在此先谢谢了!急求解决办法!

回答:
没人 会么?管理员 版主能帮忙解决下么?急等呀 谢谢你们了

MD5 32位 中间16位就是 MD5 16

3# 齐迹

你说的 我在网上看到了 问题是原来系统的会员密码是16位MD5码

从ec前台会员登录读取的是32位MD5码,16位MD5码根本登录不进去

就是想找个16位与32位MD5码共存的登录方法

找到相关的 验证密码的地方 加一个判断就可以了
文件应该是在includes\modules\integrates\integrate.php



5# 齐迹

能告诉我那段代码如何写么?加到哪个位置?

这个问题苦恼死我了!

如果这个问题对于您来讲比较简单的话,希望您能放出,谢谢!

5# 齐迹

顺便说明一下,我的原会员用户帐号和16位MD5用户密码。是直接手工倒入EC数据库的,不是通过整合程序入库的

您给我说的integrate.php文件好像是整合类的文件吧

我也很懒,先写一个能登陆的方案,其他的就说一个思路吧

我的理解,现在数据库会员表中密码有16位的MD5(导入的旧数据),同时也有32位的MD5(新的数据)

1. 在\upload\includes\modules\integrates\integrate.php文件中添加一函数

应该会加吧,在最末尾“}”符号前加上即可;

function my_passwd_md5($password)
{
$my_pwd_md5 = md5($password);
return substr($my_pwd_md5,8,16);
}

这个函数就是你提供的那个方案里面的兼容16位MD5数据

2.修改一下 function check_user() 函数

//" WHERE " . $this->field_name . "='" . $post_username . "' AND " . $this->field_pass . " ='" . $this->compile_password(array('password'=>$password)) . "'";

把上面这段代码替换成:

" WHERE " . $this->field_name . "='" . $post_username . "' AND ((" . $this->field_pass . " ='" . $this->compile_password(array('password'=>$password)) . "') OR (" . $this->field_pass . " = '" . $this->my_passwd_md5($password) . "'))";

意思是对密码校验时,满足32位 或 16位 相等即可。

先看看能不能解决。

完了,就要对密码进行16位更新,更新成32位。

说一下我的想法,可以对 会员表 多添加一个字段,用来判断是否为16位MD5数据,这在添加字段后
执行一条带判断的SQL生成字段值。

在会员登陆成功后,在

update_user_info();//更新用户信息

这里,对刚才添加的字段进行判断,如果是满足16位的MD5数据,则更新为32位的MD5数据,同时将该字段值更新为假
表示已经更新过。

如果不想动数据表结构,那就不用判断一视同仁都更新为32位的数据密码。给用户提示在什么时间内要至少登陆一次就可以,等全部登陆完成,基本就转换完成了。

check_user() 函数中的密码还为加密!这样做貌似不行吧!
不过思路很好!

9# 齐迹

楼上的想法和我想的一致,我就是不会写代码,才烦恼呢,用户登录成功后也需要都更新为32位的MD5码

8# xushuyi

谢谢 你的回复 你说的和我想法一样 就是不会写代码呀

只要你能把代码大致写出来 我应该会写对位置

我先用你的思路去试试看

8# xushuyi

试验过了 第二步可能位置不对 还是登录不进去