介绍

  • FlarumChina群有个人问了一下怎么让论坛使用他的MC服务器里的用户信息,我便反查Flarum的登录部分代码追踪到下面的内容。
  • 感觉反查代码好刺激,要读懂其他人的代码然后再自己往上面添加奇奇怪怪的东西。不过Flarum的代码好好读,十分的简洁,而且函数名和他的功能相差无几,的确是个好论坛平台。

正文

路径 vendor/illuminate/hashing/BcryptHasher.php

make函数

本函数用于生成密码的加密信息。比如说用于注册时,修改密码时的加密后的密码信息的生成。所以应当处理一下。

    public function make($value, array $options = [])
    {
        //$cost = isset($options['rounds']) ? $options['rounds'] : $this->rounds;  //原代码中用来重复hash的次数,详细解释看php函数 password_hash 的说明。

        //$hash = password_hash($value, PASSWORD_BCRYPT, ['cost' => $cost]);
        //$hash = md5($value, false); //你可以魔改成md5格式
        $hash = hash('sha256',$value); //或者是其他格式

        if ($hash === false) {
            throw new RuntimeException('Bcrypt hashing not supported.');
        }

        return $hash;
    }

check函数

本函数用于校验密码是否正确。比如说用于登录的检测

    public function check($value, $hashedValue, array $options = [])
    {
        if (strlen($hashedValue) === 0) {
            return false;
        }

        //return password_verify($value, $hashedValue); //原代码
        //return md5($value, false)===$hashedValue //魔改成md5?
        return hash('sha256', $value)===$hashedValue; //sha256?
    }

needsRehash函数

本来用于是php中password_hash的信息刷新,既然你魔改成sha256或者是md5之类的了,这个函数也就没用了,于是直接返回false。

    public function needsRehash($hashedValue, array $options = [])
    {
        //$cost = isset($options['rounds']) ? $options['rounds'] : $this->rounds;

        //return password_needs_rehash($hashedValue, PASSWORD_BCRYPT, ['cost' => $cost]);
        return false;
    }

滑稽真刺激。