<?php
class crypt0
{
//String to be encrypted
private $rawstring;
//String modified to fix mis-match lengths
//Decryption Key as String
private $key;
//Subkey is used for in the event that the key is longer than the string to be encrypted
private $subkey;
//Key made to be the length of the rawstring
private $modkey;
//Encrypted/Decrypted String
public $resStr;
//Combines key and subkey to make the modkey
private function combineKeys(){
while (strlen($this->subkey) < strlen($this->modkey)) {
$this->subkey .= $this->subkey;
}
$this->subkey = substr($this->subkey, 0, strlen($this->modkey));
$subbits = str_split($this->subkey);
$modbits = str_split($this->modkey);
$modkey = "";
foreach ($subbits as $x => $v) {
$subbits[$x] = $this->txt2Num($v);
$modbits[$x] = $this->txt2Num($modbits[$x]);
if ($modbits[$x] + $subbits[$x] > 94) {
$modkey .= ($this->num2Txt($modbits[$x] + $subbits[$x] - 94));
} else {
$modkey .= ($this->num2Txt($modbits[$x] + $subbits[$x]));
}
}
return $modkey;
}
//Function to make key match length of string to be encrypted
private function matchlength()
{
if(strlen($this->key) > strlen($this->rawstring)){
$this->subkey = substr($this->key,strlen($this->rawstring));
$this->modkey = substr($this->key,0,strlen($this->rawstring));
$this->modkey = $this->combineKeys();
}else{
$this->modkey = "";
while (strlen($this->modkey) < strlen($this->rawstring)) {
$this->modkey .= $this->key;
}
$this->modkey = substr($this->modkey, 0, strlen($this->rawstring));
}
}
private function txt2Num($i)
{
switch ($i) {
case("a"):
$r = 0;
break;
case("b"):
$r = 1;
break;
case("c"):
$r = 2;
break;
case("d"):
$r = 3;
break;
case("e"):
$r = 4;
break;
case("f"):
$r = 5;
break;
case("g"):
$r = 6;
break;
case("h"):
$r = 7;
break;
case("i"):
$r = 8;
break;
case("j"):
$r = 9;
break;
case("k"):
$r = 10;
break;
case("l"):
$r = 11;
break;
case("m"):
$r = 12;
break;
case("n"):
$r = 13;
break;
case("o"):
$r = 14;
break;
case("p"):
$r = 15;
break;
case("q"):
$r = 16;
break;
case("r"):
$r = 17;
break;
case("s"):
$r = 18;
break;
case("t"):
$r = 19;
break;
case("u"):
$r = 20;
break;
case("v"):
$r = 21;
break;
case("w"):
$r = 22;
break;
case("x"):
$r = 23;
break;
case("y"):
$r = 24;
break;
case("z"):
$r = 25;
break;
case("A"):
$r = 26;
break;
case("B"):
$r = 27;
break;
case("C"):
$r = 28;
break;
case("D"):
$r = 29;
break;
case("E"):
$r = 30;
break;
case("F"):
$r = 31;
break;
case("G"):
$r = 32;
break;
case("H"):
$r = 33;
break;
case("I"):
$r = 34;
break;
case("J"):
$r = 35;
break;
case("K"):
$r = 36;
break;
case("L"):
$r = 37;
break;
case("M"):
$r = 38;
break;
case("N"):
$r = 39;
break;
case("O"):
$r = 40;
break;
case("P"):
$r = 41;
break;
case("Q"):
$r = 42;
break;
case("R"):
$r = 43;
break;
case("S"):
$r = 44;
break;
case("T"):
$r = 45;
break;
case("U"):
$r = 46;
break;
case("V"):
$r = 47;
break;
case("W"):
$r = 48;
break;
case("X"):
$r = 49;
break;
case("Y"):
$r = 50;
break;
case("Z"):
$r = 51;
break;
case("`"):
$r = 52;
break;
case("1"):
$r = 53;
break;
case("2"):
$r = 54;
break;
case("3"):
$r = 55;
break;
case("4"):
$r = 56;
break;
case("5"):
$r = 57;
break;
case("6"):
$r = 58;
break;
case("7"):
$r = 59;
break;
case("8"):
$r = 60;
break;
case("9"):
$r = 61;
break;
case("0"):
$r = 62;
break;
case("-"):
$r = 63;
break;
case("="):
$r = 64;
break;
case("["):
$r = 65;
break;
case("]"):
$r = 66;
break;
case("\\"):
$r = 67;
break;
case(";"):
$r = 68;
break;
case("'"):
$r = 69;
break;
case(","):
$r = 70;
break;
case("."):
$r = 71;
break;
case("/"):
$r = 72;
break;
case("~"):
$r = 73;
break;
case("!"):
$r = 74;
break;
case("@"):
$r = 75;
break;
case("#"):
$r = 76;
break;
case("$"):
$r = 77;
break;
case("%"):
$r = 78;
break;
case("^"):
$r = 79;
break;
case("&"):
$r = 80;
break;
case("*"):
$r = 81;
break;
case("("):
$r = 82;
break;
case(")"):
$r = 83;
break;
case("_"):
$r = 84;
break;
case("+"):
$r = 85;
break;
case("{"):
$r = 86;
break;
case("}"):
$r = 87;
break;
case("|"):
$r = 88;
break;
case(":"):
$r = 89;
break;
case("\""):
$r = 90;
break;
case("<"):
$r = 91;
break;
case(">"):
$r = 92;
break;
case("?"):
$r = 93;
break;
case("\s"):
$r = 94;
break;
default:
$r = $i;
}
return $r;
}
private function num2Txt($i)
{
switch ($i) {
case(0):
$r = "a";
break;
case(1):
$r = "b";
break;
case(2):
$r = "c";
break;
case(3):
$r = "d";
break;
case(4):
$r = "e";
break;
case(5):
$r = "f";
break;
case(6):
$r = "g";
break;
case(7):
$r = "h";
break;
case(8):
$r = "i";
break;
case(9):
$r = "j";
break;
case(10):
$r = "k";
break;
case(11):
$r = "l";
break;
case(12):
$r = "m";
break;
case(13):
$r = "n";
break;
case(14):
$r = "o";
break;
case(15):
$r = "p";
break;
case(16):
$r = "q";
break;
case(17):
$r = "r";
break;
case(18):
$r = "s";
break;
case(19):
$r = "t";
break;
case(20):
$r = "u";
break;
case(21):
$r = "v";
break;
case(22):
$r = "w";
break;
case(23):
$r = "x";
break;
case(24):
$r = "y";
break;
case(25):
$r = "z";
break;
case(26):
$r = "A";
break;
case(27):
$r = "B";
break;
case(28):
$r = "C";
break;
case(29):
$r = "D";
break;
case(30):
$r = "E";
break;
case(31):
$r = "F";
break;
case(32):
$r = "G";
break;
case(33):
$r = "H";
break;
case(34):
$r = "I";
break;
case(35):
$r = "J";
break;
case(36):
$r = "K";
break;
case(37):
$r = "L";
break;
case(38):
$r = "M";
break;
case(39):
$r = "N";
break;
case(40):
$r = "O";
break;
case(41):
$r = "P";
break;
case(42):
$r = "Q";
break;
case(43):
$r = "R";
break;
case(44):
$r = "S";
break;
case(45):
$r = "T";
break;
case(46):
$r = "U";
break;
case(47):
$r = "V";
break;
case(48):
$r = "W";
break;
case(49):
$r = "X";
break;
case(50):
$r = "Y";
break;
case(51):
$r = "Z";
break;
case(52):
$r = "`";
break;
case(53):
$r = "1";
break;
case(54):
$r = "2";
break;
case(55):
$r = "3";
break;
case(56):
$r = "4";
break;
case(57):
$r = "5";
break;
case(58):
$r = "6";
break;
case(59):
$r = "7";
break;
case(60):
$r = "8";
break;
case(61):
$r = "9";
break;
case(62):
$r = "0";
break;
case(63):
$r = "-";
break;
case(64):
$r = "=";
break;
case(65):
$r = "[";
break;
case(66):
$r = "]";
break;
case(67):
$r = "\\";
break;
case(68):
$r = ";";
break;
case(69):
$r = "'";
break;
case(70):
$r = ",";
break;
case(71):
$r = ".";
break;
case(72):
$r = "/";
break;
case(73):
$r = "~";
break;
case(74):
$r = "!";
break;
case(75):
$r = "@";
break;
case(76):
$r = "#";
break;
case(77):
$r = "$";
break;
case(78):
$r = "%";
break;
case(79):
$r = "^";
break;
case(80):
$r = "&";
break;
case(81):
$r = "*";
break;
case(82):
$r = "(";
break;
case(83):
$r = ")";
break;
case(84):
$r = "_";
break;
case(85):
$r = "+";
break;
case(86):
$r = "{";
break;
case(87):
$r = "}";
break;
case(88):
$r = "|";
break;
case(89):
$r = ":";
break;
case(90):
$r = "\"";
break;
case(91):
$r = "<";
break;
case(92):
$r = ">";
break;
case(93):
$r = "?";
break;
case(94):
$r = "\s";
break;
default:
$r = $i;
}
return $r;
}
private function eStr()
{
//split up the string to be encrypted
$rawbits = str_split($this->rawstring);
//and the modified key
$keybits = str_split($this->modkey);
$encryptedstring = "";
foreach ($rawbits as $x => $v) {
$rawbits[$x] = $this->txt2Num($v);
$keybits[$x] = $this->txt2Num($keybits[$x]);
if ($rawbits[$x] + $keybits[$x] > 94) {
$encryptedstring .= ($this->num2Txt($rawbits[$x] + $keybits[$x] - 94));
} else {
$encryptedstring .= ($this->num2Txt($rawbits[$x] + $keybits[$x]));
}
}
return $encryptedstring;
}
private function dStr(){
//split up the string to be encrypted
$rawbits = str_split($this->rawstring);
//and the modified key
$keybits = str_split($this->modkey);
$decryptedstring = "";
foreach ($rawbits as $x => $v) {
$rawbits[$x] = $this->txt2Num($v);
$keybits[$x] = $this->txt2Num($keybits[$x]);
if ($rawbits[$x] - $keybits[$x] < 0) {
$decryptedstring .= ($this->num2Txt(94 + ($rawbits[$x] - $keybits[$x])));
} else {
$decryptedstring .= ($this->num2Txt($rawbits[$x] - $keybits[$x]));
}
}
return $decryptedstring;
}
function __construct($string, $key, $action = 'e')
{
$this->rawstring = $string;
$this->key = $key;
$this->matchlength();
if($action == 'e'){
$this->resStr = $this->eStr();
}elseif($action == 'd'){
$this->resStr = $this->dStr();
}else{
exit("Invalid Action");
}
}
}
//$enc = new crypt0($_POST['data']['string'], $_POST['data']['key'], $_POST['data']['action']);
//$enc = new crypt0("strings", "1234567", 'e');
$enc = new crypt0(".~/=,=$", "1234567", 'd');
//
echo $enc->resStr;
//$chars = "abcdefghijklmnopqrstuvwxyz";
//
//echo strtoupper($chars);
?>