예제 #1
0
 static function decodeId($id)
 {
     if (!$id) {
         return array(false, '', '');
     }
     $result = '';
     $len = strlen($id);
     $i = 0;
     $replacements = array('z' => 'z', 'a' => '+', 'b' => '/', 'c' => '=');
     while ($i < $len - 1) {
         $r = $id[$i];
         $c1 = $id[$i];
         ++$i;
         if ($c1 == 'z') {
             $c2 = $id[$i];
             if (isset($replacements[$c2])) {
                 $r = $replacements[$c2];
                 ++$i;
             }
         }
         $result .= $r;
     }
     if ($i < $len) {
         $result .= $id[$i];
     }
     $result = bin2hex(base64_decode($result));
     $a = substr($result, 0, 32);
     $b = substr($result, 32, 32);
     $secret = Q_Config::get('Q', 'external', 'secret', null);
     $c = isset($secret) ? $b === substr(Q_Utils::hmac('sha1', $a, $secret), 0, 32) : true;
     return array($c, $a, $b);
 }