有个支持php的服务器环境是必须的了 然后看我写的代码我们来一起研究ucenter的加密算法。 研究过那么一两次的人都应该知道uc的数据库里你设置同样的密码注册得到的md5加密都不一样。 这个问题很简单就是他的密码是拼接了一个随机的字符串$salt 那么这个$salt是怎么得到的呢! 这个$salt在uc_client\model\user.php 这个文件中能找的到 那么我先把他的代码贴出来 <code> Line 103 : $salt = substr(uniqid(rand()), -6); //这个就是$salt的算法 /** *我解释一下这个会得到什么rand --将 *产生一个随机数数的范围在没有限制的情况下是从0---32768 *uniqid()巨手册的说法《本人英语不怎么好,理解如下》 *根据当前时间返回一个独特的标识前缀, *我想应该是类似cookies的类型是随机并且是唯一的。 *前缀最多可是114个字符串的长度。 *substr(uniqid(rand()), -6)就是把里面产生的数截取, *截取的方法就是从后向前数6个。从第6个开始向 *后保留。给个例子 *$rest = substr("abcdef", 1); // returns "bcdef" *$rest = substr("abcdef", 3); // returns "bcd" *$rest = substr("abcdef", 4); // returns "abcd" *$rest = substr("abcdef", 8); // returns "abcdef" *这样$salt就得到了一个6个字符的随机数。 *这个随机数就是$salt的值。 **/ Line 104 : $password = md5(md5($password).$salt); //把从会员注册提交的注册表单那获取的$password //进行一次md5然后和上面的$salt拼接到一起。 //拼接完在进行一次md5 Line 107 : $this->db->query("INSERT INTO ".UC_DBTABLEPRE."members SET $sqladd username='$username', password='$password', email='$email', regip='".$this->base->onlineip."', regdate='".$this->base->time."', salt='$salt'"); //懂数据库的这个应该一看就明白就是把获取的$salt也写进数据库了。 Line 114 : $data = $this->db->fetch_first("SELECT username, uid, password, salt FROM ".UC_DBTABLEPRE."members WHERE username='$username'"); //查询得到对应$username 的 $salt, //然后同样的算法进行对比。 //如果为 "T" 登陆如果为 "F" 提示密码错误. </code> 现在用我写的代码进行$salt的测试大家看看 得到的是什么。 每次刷新就会得到不同的字符. <?php $salt = substr(uniqid(rand()), -6); for($i=0; $i<5;$i++) { echo "This is \$salt<font style='color:blue;'> $salt </font>$i<br />"; } echo "<br />"; print "获取密码设置用户密码为 a <br /><br />"; $pass = a; $password = md5(md5($pass).$salt); for($u=0;$u<5;$u++) { echo "This is \$pas<font style='color:blue;'> $password </font> $u<br/>"; } ?> 复制代码