Hi Marcus

Try this:

function CryptFile($hash, $filename)
{
    // The key used is generated using another function.
    // Since this function is only called once it has
    // nothing to do with the performance of this function
    $key = GenerateKey($hash);
    $keylen = strlen($key = implode('', $key));

    $handle = fopen($filename, 'r');
    while (!feof($handle))
    {
      // Set the time limit or the script will time out
      // on large files
      set_time_limit(30);

      $data = fread($handle, 8192);
      for ($i = 0; $i < strlen($data); $i = $i + $keylen)
      {
        $data = substr_replace($data, substr($data, $i, $keylen) ^ $key, $i, $keylen);
      }

      // Return the encrypted version to the browser
      echo $data;
    }
}

It should return the same results, but at my machine it is about 30
percent faster.

Cheers
Marcel


> Hi!
> 
> I'm using a very simple algorithm to encrypt files sent from the server
> "On Demand". The algorithm uses XOR for the encryption. My problem is
> that the code is very slow, it can only process about 40 KB per second
> on my system, so my question is, is there any more speed optimized way
> to write this code?
> 
> Here is my function:
> 
>   function CryptFile($hash, $filename)
>   {
>     // The current position in the key generated below
>     $key_pos = 0;
> 
>     // The key used is generated using another function.
>     // Since this function is only called once it has
>     // nothing to do with the performance of this function
>     $key = GenerateKey($hash);
> 
>     $handle=fopen($filename, "r");
>     while (!feof($handle))
>     {
>       // Set the time limit or the script will time out
>       // on large files
>       set_time_limit(30);
> 
>       $data = fread($handle,8192);
>       for ($i=0; $i<strlen($data); $i++)
>       {
>         // Change the data read from the file by using
>         // XOR with the key
>         $data[$i] = $data[$i] ^ $key[$key_pos];
> 
>         // Calculate the next position in the key
>         $key_pos=($key_pos+1) % count($key);
>       }
> 
>       // Return the encrypted version to the browser
>       echo $data;
>     }
>   }
> 
> My guess is that if one should start optimizing the code anywhere, it
> would be within the for-loop. Any ideas?
> 
> Thanks in advance!
> 
> Regards,
> Marcus
> 
> -- 
> PHP General Mailing List (http://www.php.net/)
> To unsubscribe, visit: http://www.php.net/unsub.php

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to