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
RE: [PHP] Optimize simple file XOR code
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
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
* 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