note 89395 deleted from function.header by danbrown
| From: | danbrown@php.net | Date: | Sun, 08 Mar 2009 15:40:53 +0000 |
| Subject: | note 89395 deleted from function.header by danbrown | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-151630@lists.php.net to get a copy of this message | ||
Note Submitter: Jamesb (axel _at_ james-b _dot_ ch )
----
Here is a php script I wrote to stream a file and crypt it with a xor operation on the bytes and
with a key :
<?php
/* You can use this code as you want ! Enjoy */
// Stream files and encrypt the data on-the-fly
// Settings
// -- File to stream
$file = "input.mp3";
// -- Reading buffer
$bufferlength = 3840;
// -- Key in hex
$keychar = "9cdfb439c7876e703e307864c9167a15";
// Function: Convertion hex key in a string into binary
function hex2bin($h) {
if (!is_string($h)) return null;
$r = array();
for ($a=0; ($a*2)<strlen($h); $a++) {
//$r.=chr(hexdec($h{$a}.$h{($a+1)}));
$r[$a] = (binary) (hexdec($h[2*$a].$h[(2*$a+1)]));
}
return $r;
}
// Headers
$headers = "";
$headers .= "Content-Type: application/octet-stream; ";
$headers .= "Content-Length: " . filesize($file) ."; ";
$headers .= "filename=\"".$file."\"; ";
header($headers);
flush(); // this doesn't really matter.
// Convert key and set the size of the key
$key = hex2bin($keychar);
$keylength = strlen($key);
// Opening the file in read-only
$fp = fopen($file, "r");
while (!feof($fp))
{
// Read a buffer size of the file
$buffer = fread($fp, $bufferlength);
$j=0;
for ($i=0; $i < $bufferlength; $i++) {
// The key is read in loop to crypt the whole file
if ($i%$keylength == 0) {
$j=0;
}
// Apply a xor operation between the key and the file to crypt
// This operation eats a lots of CPU time (Stream at 1MiB/s on my server; Intel E2180)
$bufferE[$i] = $buffer[$i]^$key[$j];
// Send the encrypted data
echo $bufferE[$i];
// Clean the memory
$bufferE[$i] = "";
$j++;
}
flush(); // this is essential for large downloads
}
// Close the file and it's finished
fclose($fp);
?>
I hope this will be helpful to someone.