用户
 找回密码
 入住 CI 中国社区
搜索
查看: 4174|回复: 2
收起左侧

关于stblog的一个问题

[复制链接]
发表于 2010-11-29 22:02:58 | 显示全部楼层 |阅读模式
最近在研究stblog的代码
遇到一个地方看不懂  求高手们帮忙看下
首先看下面的代码:
这些代码来自一个类名叫Common的文件
PHP复制代码
 
public static function do_hash($string, $salt = NULL)
    {
                if(null === $salt)
                {
                    $salt = substr(md5(uniqid(rand(), true)), 0, ST_SALT_LENGTH);
                }
                else
                {
                    $salt = substr($salt, 0, ST_SALT_LENGTH);
                }
 
        return $salt . sha1($salt . $string);
    }
 
    public static function hash_Validate($source, $target)
    {
        return (self::do_hash($source, $target) == $target);
    }
 
复制代码

再看下面的代码:
这些代码是来自模型中的(上面所说的那个Common类文件一杯加载了)
PHP复制代码
public function validate_user($username, $password)
        {
                $data = FALSE;
               
                $this->db->where('name', $username);
                $query = $this->db->get(self::TBL_USERS);
               
                if($query->num_rows() == 1)
        {
            $data = $query->row_array();
        }
               
                if(!empty($data))
                {
                        $data = (Common::hash_Validate($password, $data['password'])) ? $data : FALSE;
                }
               
                $query->free_result();
               
                return $data;
        }
 
复制代码

我主要看不懂的是这句
PHP复制代码
$data = (Common::hash_Validate($password, $data['password'])) ? $data : FALSE;
复制代码

他是如何判断两个值是不是相等的啊??
其中 $data['password']是经过MD5和sha1加密过的  不不可逆的
而$password是原始的字符串 ,再怎么加密 但是随机取的值总是不一样的啊??
很不好理解!
求高手帮忙…………
发表于 2010-11-29 22:36:08 | 显示全部楼层
生成初始密码的时候 随机串保存在密码的(0, ST_SALT_LENGTH)区间
验证的时候 再把这段随机串截出来+ sha1(随机串 + 输入的密码)  看是否和原来的一样
这样比单纯的md5加密更保密些吧。。。
 楼主| 发表于 2010-11-30 09:48:55 | 显示全部楼层
弄明白了!谢谢诶楼上的!

本版积分规则