Exemplo n.º 1
0
 static function ExtractDataPacket($data, $key, $options = array())
 {
     $data = (string) $data;
     if (isset($options["key2"])) {
         $options2 = $options;
         if (isset($options["iv2"])) {
             $options["iv"] = $options["iv2"];
         } else {
             unset($options["iv"]);
         }
         if (self::IsMcryptAvailable()) {
             $data = self::McryptDecrypt($data, $options["key2"], $options);
         } else {
             if (!isset($options["bits2"])) {
                 $options["bits2"] = strlen($options["key2"]) * 8;
             }
             if ($options["mode"] == "CBC" && !isset($options["iv"])) {
                 $options["iv"] = "";
             }
             $bf = new SSO_Blowfish();
             if ($options["mode"] == "CBC") {
                 $bf->SetBlockMode("CBC");
                 $bf->SetInitVector($options["iv"]);
             }
             $bf->SetKey($options["key2"], $options["bits2"]);
             $bf->AddData($data);
             $bf->Finalize();
             $data = $bf->Decrypt();
         }
         $data = substr($data, 1) . substr($data, 0, 1);
         $options = $options2;
     }
     if (self::IsMcryptAvailable()) {
         $data = self::McryptDecrypt($data, $key, $options);
     } else {
         if (!isset($options["bits"])) {
             $options["bits"] = strlen($key) * 8;
         }
         if (!isset($options["mode"])) {
             $options["mode"] = "ECB";
         }
         if ($options["mode"] == "CBC" && !isset($options["iv"])) {
             $options["iv"] = "";
         }
         $bf = new SSO_Blowfish();
         if ($options["mode"] == "CBC") {
             $bf->SetBlockMode("CBC");
             $bf->SetInitVector($options["iv"]);
         }
         $bf->SetKey($key, $options["bits"]);
         $bf->AddData($data);
         $bf->Finalize();
         $data = $bf->Decrypt();
     }
     if ($data === false) {
         return false;
     }
     $pos = strpos($data, "\n");
     if ($pos === false) {
         return false;
     }
     $data = substr($data, $pos + 1);
     $pos = strpos($data, "\n");
     if ($pos === false) {
         return false;
     }
     $check = substr($data, 0, $pos);
     $data = substr($data, $pos + 1);
     $pos = strrpos($data, "\n");
     if ($pos === false) {
         return false;
     }
     $data = substr($data, 0, $pos);
     if (!isset($options["lightweight"]) || !$options["lightweight"]) {
         if ($check !== strtolower(sha1($data))) {
             return false;
         }
     } else {
         if ($check !== strtolower(dechex(crc32($data)))) {
             return false;
         }
     }
     return $data;
 }