software solutions
Web Scripts » Virgenere in Php & Javascript
About:
This is a rather old script I wrote that thought someone might find useful. Its a simple proxy script: You enter the address you want in a form, the address is encrypted with virgenere, then sent to the server which downloads and sends the file by HTTP.
It should be noted this script shouldn't be used for a secure proxy: The html and key are transferred in plain text across http, and virgenere is an obsolete encryption system (and has been for about two hundred years)
Code:
<?php
if ($url==""){
echo "<body bgcolor=#005500 text=#000000>";
echo "<h3><font face=Verdana size=-1>RustySurf- A simple url encrypter circa 2002</h3>";
echo "<br><br><b>Credits:</b><bR>Uses <a href=http://sharkysoft.com/>Sharky's Javascript Vigenere Encoder</a> and the Cryptomak encryption library</a><br>";
echo "<br><b>About:</b> This is an example of how to interface a javascript and php encrpytion. Enter a url and rather than the value being transmitted as plaintext it will be (weakly) encrypted.";
echo "<table class=txtcolor width=80%><td><b>Surf::</b>";
}
?>
<form name="MyForm">
<input value="http://www." name="url" class="txtcolor" size="80"><input type="hidden" name="key" value="thefish">
<input type="hidden" name="output"><input type="button" value="go" (true);" class="txtcolor">
</form>
<SCRIPT>
function Vigenere (input, key, forward)
{
if (key == null)
key = "";
var alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
+ "abcdefghijklmnopqrstuvwxyz";
// Validate key:
key = key . toUpperCase ();
var key_len = key . length;
var i;
var adjusted_key = "";
for (i = 0; i < key_len; i ++)
{
var key_char = alphabet . indexOf (key . charAt (i));
if (key_char < 0)
continue;
adjusted_key += alphabet . charAt (key_char);
}
key = adjusted_key;
key_len = key . length;
if (key_len == 0)
{
alert ('You forgot to supply a key!');
key = "a";
key_len = 1;
}
// Transform input:
var input_len = input . length;
var output = "";
var key_index = 0;
var in_tag = false;
for (i = 0; i < input_len; i ++)
{
var input_char = input . charAt (i);
if (input_char == "<")
in_tag = true;
else if (input_char == ">")
in_tag = false;
if (in_tag)
{
output += input_char;
continue;
}
var input_char_value = alphabet . indexOf (input_char);
if (input_char_value < 0)
{
//If not alphabet
key_index = (key_index + 1) % key_len;
output += input_char;
continue;
}
var lowercase = input_char_value >= 26 ? true : false;
if (forward)
input_char_value += alphabet . indexOf (key . charAt (key_index));
else
input_char_value -= alphabet . indexOf (key . charAt (key_index));
input_char_value += 26;
if (lowercase)
input_char_value = input_char_value % 26 + 26;
else
input_char_value %= 26;
output += alphabet . charAt (input_char_value);
key_index = (key_index + 1) % key_len;
}
return output;
}
function runcoder (dir)
{
document . MyForm . output . value = Vigenere (document . MyForm . url . value, document . MyForm . key . value, dir);
window.status="Encoded url: " + document . MyForm . output . value;
location.href="?url="+ document . MyForm . output . value;
}
</SCRIPT>
</BODY></HTML>
<?php
$MAXLENGTH=1024; // maximum length of input text (byte)
$MAXCOLUMN=10; // maximum column of columnar transposition
$MAXKEYLENGTH=10; // maximum key length of index coincidence
$MAXPERMUTE=8; // maximum permutation length
function decimal($letter){
// function to change ascii letter (a..z) to decimal value (0..25)
switch ($letter){
case "a": $decvalue=0;break;
case "b": $decvalue=1;break;
case "c": $decvalue=2;break;
case "d": $decvalue=3;break;
case "e": $decvalue=4;break;
case "f": $decvalue=5;break;
case "g": $decvalue=6;break;
case "h": $decvalue=7;break;
case "i": $decvalue=8;break;
case "j": $decvalue=9;break;
case "k": $decvalue=10;break;
case "l": $decvalue=11;break;
case "m": $decvalue=12;break;
case "n": $decvalue=13;break;
case "o": $decvalue=14;break;
case "p": $decvalue=15;break;
case "q": $decvalue=16;break;
case "r": $decvalue=17;break;
case "s": $decvalue=18;break;
case "t": $decvalue=19;break;
case "u": $decvalue=20;break;
case "v": $decvalue=21;break;
case "w": $decvalue=22;break;
case "x": $decvalue=23;break;
case "y": $decvalue=24;break;
case "z": $decvalue=25;break;
default: $decvalue=$letter+26;break;
}
return $decvalue;
}
function ascii_letter($decvalue){
// function to change decimal value (0..25) to ascii letter (a..z)
switch($decvalue){
case 0:$letter="a";break;
case 1:$letter="b";break;
case 2:$letter="c";break;
case 3:$letter="d";break;
case 4:$letter="e";break;
case 5:$letter="f";break;
case 6:$letter="g";break;
case 7:$letter="h";break;
case 8:$letter="i";break;
case 9:$letter="j";break;
case 10:$letter="k";break;
case 11:$letter="l";break;
case 12:$letter="m";break;
case 13:$letter="n";break;
case 14:$letter="o";break;
case 15:$letter="p";break;
case 16:$letter="q";break;
case 17:$letter="r";break;
case 18:$letter="s";break;
case 19:$letter="t";break;
case 20:$letter="u";break;
case 21:$letter="v";break;
case 22:$letter="w";break;
case 23:$letter="x";break;
case 24:$letter="y";break;
case 25:$letter="z";break;
default:$letter=$decvalue-26;break;
}
return $letter;
}
function check_length($input_text){
// function to check allowed maximum length
global $MAXLENGTH;
if(strlen($input_text)>=$MAXLENGTH){
$input_text=substr($input_text,0,$MAXLENGTH);
}
return $input_text;
}
if ($url!=""){
//include "main.php";
function vigenere_decode($plain,$key){
$cipher="";
// $plain=filter($plain);
// $plain=check_length($plain);
// $key=filter($key);
// $key=check_length($key);
if(strlen($key)==0) return "error: please input key";
for($i=0;$i<strlen($plain);$i=$i+strlen($key)){
$pblock=substr($plain,$i,strlen($key));
for($j=0;$j<strlen($pblock);$j++){
$p=substr($pblock,$j,1);
if ($p=="."||$p=="/"||$p=="?"||$p=="&"||$p==":"||$p=="\") {
$cipher=$cipher.$p;
}
else{
$k=substr($key,$j,1);
$p=decimal($p);
$k=decimal($k);
$c=($p-$k)%26;
if($c?)$c=$c+26;
$c=ascii_letter($c);
$cipher=$cipher.$c;
}
}
}
return $cipher;
}
$cipher=vigenere_decode($url,"thefish") ;
$file = fopen ($cipher, "r");
while (!feof ($file)) {
$line = fgets ($file, 1024);
echo $line;
}
fclose($file);
}
?>