Exemplo n.º 1
0
 static function CreateDataPacket($data, $key, $options = array())
 {
     $data = (string) $data;
     if (!isset($options["prefix"])) {
         $options["prefix"] = uniqid(mt_rand(), true);
     }
     $options["prefix"] = strtolower(dechex(crc32($options["prefix"])));
     if (!isset($options["lightweight"]) || !$options["lightweight"]) {
         $data = $options["prefix"] . "\n" . strtolower(sha1($data)) . "\n" . $data . "\n";
     } else {
         $data = $options["prefix"] . "\n" . strtolower(dechex(crc32($data))) . "\n" . $data . "\n";
     }
     if (self::IsMcryptAvailable()) {
         $data = self::McryptEncrypt($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->Encrypt();
     }
     if (isset($options["key2"])) {
         $data = substr($data, -1) . substr($data, 0, -1);
         if (isset($options["iv2"])) {
             $options["iv"] = $options["iv2"];
         } else {
             unset($options["iv"]);
         }
         if (self::IsMcryptAvailable()) {
             $data = self::McryptEncrypt($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->Encrypt();
         }
     }
     return $data;
 }