Uchome中对用户密码的加密规则是,当新用户注册时,为这个用户生成一个六位的随机字符串$salt(我为自己带盐!),比如fy76e8,将这个$salt以及被$salt加密过的密码存放在uchome的用户信息中心--Ucenter数据库的uc_members表中(鄙视某些明文存放用户信息的网站,md5虽然不是不能被破解,但是起码是加密了的):
$password = md5(md5($password).$salt); //对字符串进行了两次加密
所以可以看出其实Ucenter.uc_members才是真的存放用户信息的地方,而Uchome.uchome_member基本是个摆设,看下do_login.php的代码就知道,用户输入的信息在Ucenter里对比后会去修改本地用户表uchome_member里的信息的。而用户正确登陆后,会把uid+md5(pwd)放在uchome_session表里,用以统计在线用户的。
但是,以上对密码的加密不是不可破解的,所以可以升级下加密的规则,最起码让破解的成本增加一个级别:
1.对$salt也进行加密:
$password = md5(md5($password).md5($salt)); //三次加密
2.以上两种方法其实还是有个问题,如果你的数据库泄露了,别人就可以轻而易举的根据那些“盐”来破解密码了,所以再加一个东西:
$password = md5(md5($password).md5($_SECRET).md5($salt));
其中$_SECRET是一个记录在配置文件里(如config.inc.php)或者在初始化时(common.php)声明的一个全局变量,不存放在数据库里。