情景

这个情景可能遇到的也不在少数,不想舍弃用户数据,还想让用户无需注册在新站保留账号。
实际当我们在迁移的时候,稍微了解数据库的同学应该明白想要迁移用户数据只需要迁移用户数据表即可。
实际上我也是这么做的,但是中途遇到了几个小问题,这里我总结一下!

Discuz用户密码加密算法

Discuz的用户信息都存放在 ‘pre_common_member‘ 表里,包含了我们需要转移的 邮箱,用户名,密码,积分,ip 等各类信息
那么很简单了,便利这个表再插入到Wordpress表内即可
但在导入表之前需要先测试一下用户数据是否匹配以示严谨~
当我测试密码匹配的时候发现,这里的密码似乎并不匹配,首先我想到的就是应该是加盐了,但是纵观整个 ‘pre_common_member‘ 表,似乎并没有该有的字段
网上找了一圈发现Discuz的用户真实密码是存在 ‘pre_ucenter_members‘ 表内的,’pre_common_member‘ 表内的密码我现在还不知道有什么用处,但至少跟我们需要迁移的数据没什么关联。
从 ‘pre_ucenter_members‘ 表中找到了我们需要的 ‘salt‘ 字段,经过测试得出Discuz的密码加密算法为

1
md5(md5('password').'salt');

tips: Discuz里面的salt是一个6位的 数字+字母 随机数

Wordpress用户密码加密算法

搞定了DZ的加密算法后,那么如何将DZ的用户信息插入到WP里面就很重要了,打开 Wordpress 的数据库找到 ‘wp-user‘表,找到 ‘user_pass‘ 字段,发现里面加密的内容似乎无迹可寻。
实际上,Wordpress的加密是使用了 phpass 类来加密的,由 phpass 加密的密码具有不可逆性,所以想要破解是不可能了,这里简单说一下 phpass 的加密算法
目前我们的PHP版本应该都在5以上,所以前缀是一样的 $P$B 大致写出来如下:

1
2
3
4
5
$count = rand(1,8);
$hash = md5($salt . $password, TRUE);
while($count--){
$hash = md5($hash . $password, TRUE);
}

看起来是不是很强,我们无法破解这样的密码,实际使用中,我们也可以使用 phpass 来做密码加密,让我们的数据库更加的安全~
然而我们数据迁移时其实完全可以避免这种问题,Wordpress是保留了md5加密的形式的,如果 ‘user_pass‘ 字段里面存储的是md5加密的32值,wordpress也可以登录成功,并且再登陆后会将 ‘user_pass‘ 字段修改为 phpass 加密的格式,是不是很人性化呢。
综上所述,我们无需解出来wordpress的加密算法,我们也解不出来~

开始迁移用户数据

关于迁移有很多细节,本来是打算写出来的,后来发现没什么技术含量,都是流水账,直接开源到github好了
需要的朋友请直接点击 D2W - Github