会员用户表如何整合进ucenter及康盛UCenter系统密码算法规则和生成方法 收藏
2009年11月08日


fxs_2008注:

      ucenter是一个好东西。实际上,它是将用户系统从各种系统中独立出来!成为一个独立的系统,并用它和其他各种系统进行联结!
     在实际应用中,ucenter在解决同步登录上,不失为一个好的选择!
     如果你的所有应用均是PHP开发的,用ucenter整合多用户系统也不失为一个好的选择!即使你不用康盛的其他产品!
    但如果你是多语言开发的,则面临一个难解的问题,你必须有和uenter一样的加密和解密机制,如果做不到,就不要考虑ucenter了!
      

    好了,说了那么多,还是解决一下现实的问题吧!我一开始就没有用ucenter,现在我有很多用户,如何倒入ucenter?
    用户不统一,网站就很难同步!
    如果你有原有数据?根据情况下,两种方式:
  
    第一:如果你知道用户名,密码,OK,调用ucenter的接口函数;
     integer uc_user_register(string username , string password

, string email [, integer questionid , string answer])
    把所有用户批量在ucenter重新注册一遍即可!
   
    第二:如果你的密码已MD5加密
         这个时也好解决!
      ucenterr的uc_members的passport密码计算规则是$password=md5(md5($password).$salt)
         
    你将$salt设为空,相当于对passport重新一次MD5。
     将所有用户表数据遍历插入ucenterr的members表!

  1. $sql= "select *  from  zzxj.memb_users where  id >1 ";
  2. $users=sql_getall($sql,MYSQL_ASSOC);
  3. print_r($users);
  4.  
  5. foreach ($users as $row){
  6.     $sql="insert into zzxj.uc_members  (uid,username,password,email,salt) values ({$row['id']},'{$row['username']}','".md5($row['password'])."','{$row['mail']}','')";
  7.     mysql_query($sql);
  8. }




   第三:如果各个应用的用户表和ucenter的用户表不一致!
    我的建议是:给各个子应用的用户表加一个标识,标识为ucenter的Uid,各个子用户表仍不变,有各自的用户id和用户名!
     


下面是转自月光博客(http://www.williamlong.info)的文章,可以参考:



康盛的系列产品,包括Discuz、UCHome、Supesite都集成了同一个用户系统——UCenter,用户登录的密码也保存在UCenter中,对于其他系统集成或导出数据到UCenter系统,通

常会遇到密码生成的问题,这里就讨论一下UCenter的用户密码算法规则和生成方法。

密码通常使用MD5对用户密码HASH后保存在数据库中的方法,如果黑客拿到了这个HASH数值,那么可以采用字典的方式暴力破解,如果这个字典数据库足够大,并且字典比较符合

人们的设置习惯的话,那很容易就能破解常见的密码,因此UCenter采用了salt来防止这种暴力破解,salt是一随机字符串,它与口令连接在一起,再用单向函数对其运算,然后

将salt值各单向函数运算的结果存入数据库中。如果可能的salt值的数目足够大的话,它实际上就消除了对常用口令采用的字典式攻击,因为黑客不可能在数据库中存储那么多

salt和用户密码组合后的HASH值。

UCenter的创始人密码是保存在文件中的,打开uc下面/data/config.inc.php文件,里面的UC_FOUNDERPW保存的就是密码,而UC_FOUNDERSALT保存的是SALT数值,创始人密码的创

建规则是:UC_FOUNDERPW=md5(md5(PASSWORD).UC_FOUNDERSALT),就是先将密码MD5,然后添加salt,然后再次MD5,产生的HASH数值保存在config.inc.php文件中,因此修改

UC_FOUNDERPW里面的数值就可以修改UCenter的创始人密码。

UCenter的用户信息是保存在uc_members表中,在这个表中,每个用户都有一个不同的随机salt字段,表中的password字段为计算后的密码,密码计算规则是$password=md5(md5

($password).$salt),也就是将用户的密码MD5后,添加salt,然后再MD5,保存在password字段中。

因此,如果进行不同系统的数据转换,可以根据这个原理,将其他系统的用户名和密码计算后,导入UCenter的uc_members表中,实现用户的迁移。例如,如果原有系统使用的是

md5(password)这样的算法保存密码,那就通过程序随机生成salt,然后计算两者累加后的md5,这样就很容易计算出这个用户在UCenter中的用户密码HASH值,从而实现用户的

无缝迁移。

不过,如果原有系统使用的是md5(password+salt)的方式保存的密码,那就无法实现密码的平滑迁移UCenter了,即使迁移,也只能人为将其UCenter的password增加一个salt才

能使用,因此,我们在平时设计系统用户密码的时候,应该尽量采用md5(md5(password)+salt)的方式保存密码,这样才能方便的实现和UCenter的接口,并且保证了安全性,

通常对于英文用户名来说,自建系统使用username来做salt是个简便的方法。

 

本文永久链接: http://www.zzxj.net/blog/fxs_2008/archive/2009/11/08/82.html

发表于 @ 2009年11月08日 |评论(loading... )|收藏

发表评论 姓  名: