I was in the process of writing the code for an encryption engine when I ran across this post.

Link encryption emergency

and saw what a kludged together thing people were using to encrypt their URLs. So I wrote not one, but two, encryption engines that would do a sound job of encoding them. They can even be used to handle quite large files with a reasonable security.
PHP Code:
The HTML page, for testing and making a key_file.
<!DOCTYPE html>
<head><!-- Extended ascii requires charset=iso8859-1 -->
<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1" />
<title>miniCryptor</title>
<style>
body
{
width: 900px;
margin: 0 auto;
padding-top: 200px;
font-size: 24px;
}
</style>
</head>
<body>
<div id="container">
<p><a href="./keygen.php">Get Keycode</a></p>
</div>
<pre>
<?php
include "./engine.php";
if(isset(
$_POST['input_string']))
    {
$input_string=$_POST['input_string'];
enCrypt($input_string); // enCrypt($input_string , $key_file);
    
}
?>
</pre>
<form action="./index.php" method="post">
<textarea name="input_string"></textarea><br  />
<input type="submit" value="Submit something !" />
</form>
</body>
</html>
The keygen.php.
<?php
$symbols
=array('q','w','e','r','t','y','u','i','o','p','a','s','d','f','g','h','j','k','l','z','x','c','v','b','n','m','0','1','2','3','4','5','6','7','8','9','^','|','M','N','B','V','C','X','Z','A','S','D','F','G','H','J','K','L','P','O','I','U','Y','T','R','E','W','Q');
for(
$i=0;$i<4096;$i++)
{
$char[$i] = $symbols[rand(0,63)];
}
$my_key=implode($char);
$my_hash=hash("crc32b",$my_key);
file_put_contents("./tmp.txt",$my_key);
header('Content-type: text/plain');
header('Content-Disposition: attachment; filename="'.$my_hash.'.key"');
readfile("./tmp.txt");
unlink("./tmp.txt");
?>
The engine which uses a key.
<?php

$key_file
="./3459c072.key";

function 
enCrypt($input_string $key_file)
    {
    
$keys=file_get_contents($key_file);
    
$key_char=str_split($keys,1);
    
$input_char=str_split($input_string,1);
    
$k=count($key_char);
    
$c=count($input_char);
    
$s=rand(256,4095);
    
$t=rand(256,3083);
    for(
$i=0;$i<$c;$i++)
        {
    
$num=ord($input_char[$i])+ord($key_char[($i+$s)%4096])+$t;
    
$stk[$i]=dechex($num);
        }
    
$input_string=implode($stk);
    
$input_string=$input_string.dechex($s).dechex($t);
    
file_put_contents("./test.txt",$input_string);
    
//return $input_string;
    
deCrypt($input_string $key_file);  // Uncomment this line for testing.
    
}
function 
deCrypt($input_string $key_file)
    {
    
$keys=file_get_contents($key_file);
    
$key_char=str_split($keys,1);
    
$input_char=str_split($input_string,3);
    
$k=count($key_char);
    
$c=count($input_char);
    
$s=hexdec($input_char[$c-2]);
    
$t=hexdec($input_char[$c-1]);
    for(
$i=0;$i<$c-2;$i++)
        {
    
$num=hexdec($input_char[$i])-ord($key_char[($i+$s)%4096])-$t;
    
$stk[$i]=chr($num);
        }
    
$input_string=implode($stk);
    
file_put_contents("./test2.txt",$input_string);
    
//return $input_string;
    
}
?>
The engine which uses the hash of the string as the key.
<?php

function enCrypt($input_string)
        {
    
//print_r(hash_algos()); // Uncomment to get available hashes.
    
$keys=hash("md5",$input_string);
    
$key_char=str_split($keys,1);
    
$input_char=str_split($input_string,1);
    
$k=count($key_char);
    
$c=count($input_char);
    for(
$i=0;$i<$c;$i++)
            {
    
$num=ord($input_char[$i])+ord($key_char[($i)%$k])+(rand(1,15)*4096);
    
$stk[$i]=dechex($num);
            }
    
$input_string=implode($stk);
    
$input_string=$keys.$input_string// Hash of input string used as key.
    
file_put_contents("./test.txt",$input_string);  // For testing.
    //return $input_string;
    
deCrypt($input_string); // Uncomment this line for testing.
        
}
        
function 
deCrypt($input_string)
        {
    
$s=str_split($input_string,4);
    
$cnt=count($s);
    
$keys="";
    for(
$h=0;$h<8;$h++) // To count of hash length/4 minus 1.
            
{
    
$keys.=$s[$h];
            }
    
$key_char=str_split($keys,1);
    
$k=count($key_char);
    for(
$i=8;$i<$cnt;$i++) // From count of hash length/4.
            
{
    
$num=hexdec($s[$i]);
    
$stk[$i]=chr($num-ord($key_char[($i-8)%$k])%4096);
            }
    
$input_string=implode($stk);
    
file_put_contents("./test2.txt",$input_string);  // For testing.
    //return $input_string;
        
}
?>