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