Re: [PHP] Optimize simple file XOR code

2004-06-24 Thread Marcel Tschopp
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; $istrlen($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



RE: [PHP] Optimize simple file XOR code

2004-06-24 Thread Marcus Johansson
Wow! That REALLY did make a great difference!
Encoding a file of 2MB took 50 seconds before, now it is done in 1 (ONE)
second!

My Key is 8192 bytes long, is that the reason for why it so much faster
for me?
I don't really get how it works, but I guess I will figure it out.

Thank you very much!

-- Marcus

-Original Message-
From: Marcel Tschopp [mailto:[EMAIL PROTECTED] 
Sent: den 24 juni 2004 13:37
To: [EMAIL PROTECTED]
Subject: Re: [PHP] Optimize simple file XOR code


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; $istrlen($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

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



Re: [PHP] Optimize simple file XOR code

2004-06-24 Thread Curt Zirzow
Just to speed things up a little more...

* Thus wrote Marcel Tschopp:
 ...
 $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);

// read in the $keylen amount
$data = fread($handle, $keylen);

   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;

// then all the above becomes usless..
echo $data ^ $key


Curt
-- 
First, let me assure you that this is not one of those shady pyramid schemes
you've been hearing about.  No, sir.  Our model is the trapezoid!

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



Re: [PHP] Optimize simple file XOR code

2004-06-24 Thread Curt Zirzow
* Thus wrote Marcus Johansson:
 Wow! That REALLY did make a great difference!
 Encoding a file of 2MB took 50 seconds before, now it is done in 1 (ONE)
 second!
 
 My Key is 8192 bytes long, is that the reason for why it so much faster
 for me?

Most likely because the number crunching is happening in C instead
of the  php code.

 I don't really get how it works, but I guess I will figure it out.

It's taking advanatge to the xor'ing of strings:

  echo 'hallo'  ^ 'hello';

php will xor each corresponding byte in the string, so your output
will be (in binary)

  04000


HTH,

Curt
-- 
First, let me assure you that this is not one of those shady pyramid schemes
you've been hearing about.  No, sir.  Our model is the trapezoid!

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