Created
January 31, 2014 23:51
-
-
Save defuse/8745701 to your computer and use it in GitHub Desktop.
//// BAD CRYPTO CODE //// DO NOT USE THIS CODE ////
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
// [LIB - Crypt Functions] | |
// (c) 2005-2013 unix-world.org - all rights reserved | |
// code release 2013-05-30 | |
//##################################################### PREVENT S EXECUTION | |
if(A_HEADER_EXEC_RUNTIME != 'NetVisionOpenSource') { | |
die('This PHP script: `'.htmlspecialchars(@basename(__FILE__)).'` cannot be executed directly !'); | |
} //end if | |
//##################################################### | |
//====================================================== | |
// smartnet framework | |
//====================================================== | |
// CRYPT Functions LIB (WIN:LINUX:UNIX) | |
// INDEPENDENT | |
//====================================================== | |
// Requires PHP 4.4.1 or later | |
//====================================================== | |
//===================================================================================== | |
//===================================================================================== CLASS START | |
//===================================================================================== | |
// provide the (WEAK / FAST :: symetrical :: HASH) cryptography support // (ENCRYPT + DECRYPT) | |
// v.1.2.1 (unixworld) | |
// WARNING: DO NOT USE smart_ [OVERLOADED FUNCTIONS, as it does cannot handle MultyByte Data] | |
// WARNING: Remember as passed data to be BASE64 ENCODED ! | |
class hash_encryption { | |
// Simple but secure encryption based on hash functions | |
// Basically this is algorithm provides a block cipher in ofb mode (output feedback mode) | |
// requires sha1 function in PHP | |
// based on :: Quadracom v.1.0 | |
//======================================== | |
//======================================== | |
// @ PRIVATE | |
var $hash_key; // @var string :: Hashed value of the user provided encryption key | |
// @ PRIVATE | |
var $hash_length; // @var int :: String length of hashed values using the current algorithm | |
// @ PRIVATE | |
var $salt; // @var string :: Secret value added to randomize output. Change this value to add more randomness to your encryption | |
//======================================== | |
//======================================== | |
//============================================================== | |
// Constructor method | |
// Used to set key for encryption and decryption. | |
// @param string $key Your secret key used for encryption and decryption | |
// @return mixed | |
function hash_encryption($key) { | |
// generate the SALT | |
$this->salt = sha1('#num::'.md5(''.time()).'->'.'Date:'.date('Y-m-d H:i:s O')).'@'.md5('This is the RANDOM salt generator which must be used ! @$#&(#&)(*_*$^$*$%*$%*$^^^%&*$^($^%**!@#@^%#:"{}<>:?"'); | |
// Instead of using the key directly we compress it using a hash function | |
$this->hash_key = $this->_hash($key); | |
// Remember length of hashvalues for later use | |
$this->hash_length = strlen($this->hash_key); | |
} //END FUNCTION | |
//============================================================== | |
//============================================================== | |
// [PUBLIC] | |
// Method used for encryption | |
// @param string $string Message to be encrypted | |
// @return string Encrypted message | |
function encrypt($string) { | |
// gen IV | |
$iv = $this->_generate_iv(); | |
// Clear output | |
$out = ''; | |
// First block of output is ($this->hash_hey XOR IV) | |
for($c=0;$c < $this->hash_length;$c++) { | |
$out .= chr(ord($iv[$c]) ^ ord($this->hash_key[$c])); | |
} //end for | |
// Use IV as first key | |
$key = $iv; | |
$c = 0; | |
// Go through input string | |
while($c < strlen($string)) { | |
// If we have used all characters of the current key we switch to a new one | |
if(($c != 0) and ($c % $this->hash_length == 0)) { | |
// New key is (Last block of plaintext XOR current Key) | |
$key = $this->_hash($key . substr($string,$c - $this->hash_length,$this->hash_length)); | |
} //end if | |
// Generate output by xor-ing input and key character for character | |
$out .= chr(ord($key[$c % $this->hash_length]) ^ ord($string[$c])); | |
$c++; | |
} //end while | |
//return base64 encoded string (smartnet) | |
$out = base64_encode($out); | |
return $out; | |
} //END FUNCTION | |
//============================================================== | |
//============================================================== | |
// [PUBLIC] | |
// Method used for decryption | |
// @param string $string Message to be decrypted | |
// @return string Decrypted message | |
function decrypt($string) { | |
//-- decode base64 encoded string (smartnet) | |
$string = base64_decode($string); | |
//-- Extract encrypted IV from input | |
$tmp_iv = substr($string, 0, $this->hash_length); | |
//-- Extract encrypted message from input | |
$string = substr($string, $this->hash_length, (strlen($string) - $this->hash_length)); | |
//-- | |
$iv = $out = ''; | |
//-- | |
//-- Regenerate IV by xor-ing encrypted IV from block 1 and $this->hashed_key :: Mathematics: (IV XOR KeY) XOR Key = IV | |
for($c=0;$c < $this->hash_length;$c++) { | |
$iv .= chr(ord($tmp_iv[$c]) ^ ord($this->hash_key[$c])); | |
} //end for | |
//-- Use IV as key for decrypting the first block cyphertext | |
$key = $iv; | |
$c = 0; | |
//-- | |
//-- Loop through the whole input string | |
while($c < strlen($string)) { | |
//-- If we have used all characters of the current key we switch to a new one | |
if(($c != 0) and ($c % $this->hash_length == 0)) { | |
// New key is (Last block of recovered plaintext XOR current Key) | |
$key = $this->_hash($key.substr($out,$c - $this->hash_length,$this->hash_length)); | |
} //end if | |
//-- Generate output by xor-ing input and key character for character | |
$out .= chr(ord($key[$c % $this->hash_length]) ^ ord($string[$c])); | |
//-- | |
$c++; | |
//-- | |
} //end while | |
//-- | |
//-- | |
return $out; | |
//-- | |
} //END FUNCTION | |
//============================================================== | |
//============================================================== | |
//============================================================== PRIVATES | |
//============================================================== | |
//============================================================== | |
// Hashfunction used for encryption | |
// This class hashes any given string using the best available hash algorithm. | |
// Currently support for sha1 is provided. | |
// but I don't recommend this. | |
// @access private | |
// @param string $string Message to hashed | |
// @return string Hash value of input message | |
function _hash($string) { | |
// force use sha1() encryption (smartnet) | |
$result = sha1($string); | |
$out =''; | |
// Convert hexadecimal hash value to binary string | |
for($c=0;$c<strlen($result);$c+=2) { | |
$out .= $this->_hex2chr($result[$c] . $result[$c+1]); | |
} //end for | |
return $out; | |
} //END FUNCTION | |
//============================================================== | |
//============================================================== | |
// Generate a random string to initialize encryption | |
// This method will return a random binary string IV ( = initialization vector). | |
// The randomness of this string is one of the crucial points of this algorithm as it | |
// is the basis of encryption. The encrypted IV will be added to the encrypted message | |
// to make decryption possible. The transmitted IV will be encoded using the user provided key. | |
// @todo Add more random sources. | |
// @access private | |
// @see function hash_encryption | |
// @return string Binary pseudo random string | |
function _generate_iv() { | |
// Initialize pseudo random generator | |
srand ((double)microtime()*1000000); | |
// Collect random data. | |
// Add as many "pseudo" random sources as you can find. | |
// Possible sources: Memory usage, diskusage, file and directory content... | |
$iv = $this->salt; | |
$iv .= rand(0,getrandmax()); | |
$iv .= print_r($GLOBALS,true); | |
return $this->_hash($iv); | |
} //END FUNCTION | |
//============================================================== | |
//============================================================== | |
// Convert hexadecimal value to a binary string | |
// This method converts any given hexadecimal number between 00 and ff to the corresponding ASCII char | |
// @access private | |
// @param string Hexadecimal number between 00 and ff | |
// @return string Character representation of input value | |
function _hex2chr($num) { | |
return chr(hexdec($num)); | |
} //END FUNCTION | |
//============================================================== | |
//============================================================== | |
//============================================================== | |
//------------------------------------ | |
//-- # EXAMPLE USAGE: | |
// $crypt = new hash_encryption('the secret ...'); | |
// $enc_text = $crypt->encrypt('text to be encrypted'); | |
// $dec_text = $crypt->decrypt($enc_text); | |
//-- # WARNING: !!! The $encrypted WILL BE ALWAYS (ALMOST) DIFFERENT !!! | |
//------------------------------------ | |
} //END CLASS | |
//===================================================================================== | |
//===================================================================================== CLASS END | |
//===================================================================================== | |
//===================================================================================== | |
//===================================================================================== CLASS START | |
//===================================================================================== | |
// provide the (STRONG / SLOW :: symetrical :: BLOWFISH) cryptography support // (ENCRYPT + DECRYPT) | |
// v.1.0 (unixworld) | |
// WARNING: DO NOT USE smart_ [OVERLOADED FUNCTIONS, as it does cannot handle MultyByte Data] | |
// WARNING: Remember as passed data to be BASE64 ENCODED ! | |
class blowfish_encryption { | |
// The Cipher BlowFish class implements the Blowfish encryption algorithm. | |
// based on Horde Cipher blowfish v.1.2.2.3 | |
//======================================== | |
//======================================== | |
//-- INIT Arrays | |
var $p = array(); | |
var $s1 = array(); | |
var $s2 = array(); | |
var $s3 = array(); | |
var $s4 = array(); | |
//-- | |
//-- Pi Array :: PRIVATE | |
var $init_arr_p = array( | |
0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344, | |
0xA4093822, 0x299F31D0, 0x082EFA98, 0xEC4E6C89, | |
0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C, | |
0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917, | |
0x9216D5D9, 0x8979FB1B | |
); | |
//-- | |
//======================================== | |
//-- S Boxes :: PRIVATE | |
var $init_arr_s1 = array( | |
0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7, | |
0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99, | |
0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16, | |
0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E, | |
0x0D95748F, 0x728EB658, 0x718BCD58, 0x82154AEE, | |
0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013, | |
0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF, | |
0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E, | |
0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60, | |
0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440, | |
0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE, | |
0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A, | |
0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E, | |
0xAFD6BA33, 0x6C24CF5C, 0x7A325381, 0x28958677, | |
0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193, | |
0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032, | |
0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88, | |
0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239, | |
0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E, | |
0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0, | |
0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3, | |
0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98, | |
0xA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88, | |
0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE, | |
0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6, | |
0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D, | |
0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B, | |
0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7, | |
0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA, | |
0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463, | |
0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F, | |
0x6DFC511F, 0x9B30952C, 0xCC814544, 0xAF5EBD09, | |
0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3, | |
0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB, | |
0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279, | |
0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8, | |
0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB, | |
0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82, | |
0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB, | |
0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573, | |
0x695B27B0, 0xBBCA58C8, 0xE1FFA35D, 0xB8F011A0, | |
0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B, | |
0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790, | |
0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8, | |
0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4, | |
0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0, | |
0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7, | |
0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C, | |
0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD, | |
0x2F2F2218, 0xBE0E1777, 0xEA752DFE, 0x8B021FA1, | |
0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299, | |
0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9, | |
0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477, | |
0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF, | |
0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49, | |
0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF, | |
0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA, | |
0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5, | |
0x83260376, 0x6295CFA9, 0x11C81968, 0x4E734A41, | |
0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915, | |
0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400, | |
0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915, | |
0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664, | |
0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A | |
); | |
//-- | |
var $init_arr_s2 = array( | |
0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623, | |
0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266, | |
0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1, | |
0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E, | |
0x3F54989A, 0x5B429D65, 0x6B8FE4D6, 0x99F73FD6, | |
0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1, | |
0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E, | |
0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1, | |
0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737, | |
0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8, | |
0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF, | |
0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD, | |
0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701, | |
0x3AE5E581, 0x37C2DADC, 0xC8B57634, 0x9AF3DDA7, | |
0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41, | |
0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331, | |
0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF, | |
0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF, | |
0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E, | |
0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87, | |
0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C, | |
0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2, | |
0xEF1C1847, 0x3215D908, 0xDD433B37, 0x24C2BA16, | |
0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD, | |
0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B, | |
0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509, | |
0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E, | |
0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3, | |
0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F, | |
0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A, | |
0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4, | |
0xF2F74EA7, 0x361D2B3D, 0x1939260F, 0x19C27960, | |
0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66, | |
0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28, | |
0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802, | |
0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84, | |
0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510, | |
0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF, | |
0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14, | |
0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E, | |
0x648B1EAF, 0x19BDF0CA, 0xA02369B9, 0x655ABB50, | |
0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7, | |
0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8, | |
0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281, | |
0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99, | |
0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696, | |
0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128, | |
0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73, | |
0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0, | |
0x45EEE2B6, 0xA3AAABEA, 0xDB6C4F15, 0xFACB4FD0, | |
0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105, | |
0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250, | |
0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3, | |
0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285, | |
0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00, | |
0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061, | |
0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB, | |
0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E, | |
0xA6078084, 0x19F8509E, 0xE8EFD855, 0x61D99735, | |
0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC, | |
0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9, | |
0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340, | |
0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20, | |
0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7 | |
); | |
//-- | |
var $init_arr_s3 = array( | |
0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934, | |
0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068, | |
0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF, | |
0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840, | |
0x4D95FC1D, 0x96B591AF, 0x70F4DDD3, 0x66A02F45, | |
0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504, | |
0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A, | |
0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB, | |
0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE, | |
0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6, | |
0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42, | |
0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B, | |
0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2, | |
0x3A6EFA74, 0xDD5B4332, 0x6841E7F7, 0xCA7820FB, | |
0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527, | |
0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B, | |
0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33, | |
0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C, | |
0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3, | |
0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC, | |
0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17, | |
0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564, | |
0x257B7834, 0x602A9C60, 0xDFF8E8A3, 0x1F636C1B, | |
0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115, | |
0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922, | |
0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728, | |
0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0, | |
0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E, | |
0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37, | |
0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D, | |
0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804, | |
0xF1290DC7, 0xCC00FFA3, 0xB5390F92, 0x690FED0B, | |
0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3, | |
0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB, | |
0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D, | |
0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C, | |
0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350, | |
0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9, | |
0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A, | |
0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE, | |
0x9DBC8057, 0xF0F7C086, 0x60787BF8, 0x6003604D, | |
0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC, | |
0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F, | |
0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61, | |
0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2, | |
0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9, | |
0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2, | |
0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C, | |
0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E, | |
0xB77F19B6, 0xE0A9DC09, 0x662D09A1, 0xC4324633, | |
0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10, | |
0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169, | |
0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52, | |
0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027, | |
0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5, | |
0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62, | |
0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634, | |
0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76, | |
0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7C927C24, | |
0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC, | |
0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4, | |
0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C, | |
0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837, | |
0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0 | |
); | |
//-- | |
var $init_arr_s4 = array( | |
0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B, | |
0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE, | |
0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B, | |
0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4, | |
0x5748AB2F, 0xBC946E79, 0xC6A376D2, 0x6549C2C8, | |
0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6, | |
0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304, | |
0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22, | |
0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4, | |
0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6, | |
0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9, | |
0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59, | |
0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593, | |
0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51, | |
0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28, | |
0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C, | |
0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B, | |
0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28, | |
0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C, | |
0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD, | |
0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A, | |
0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319, | |
0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB, | |
0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F, | |
0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991, | |
0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32, | |
0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680, | |
0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166, | |
0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE, | |
0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB, | |
0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5, | |
0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47, | |
0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370, | |
0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D, | |
0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84, | |
0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048, | |
0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8, | |
0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD, | |
0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9, | |
0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7, | |
0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38, | |
0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F, | |
0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C, | |
0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525, | |
0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1, | |
0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442, | |
0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964, | |
0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E, | |
0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8, | |
0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D, | |
0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F, | |
0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299, | |
0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02, | |
0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC, | |
0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614, | |
0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A, | |
0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6, | |
0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B, | |
0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0, | |
0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060, | |
0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E, | |
0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9, | |
0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F, | |
0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6 | |
); | |
//-- | |
//======================================== | |
// Encryption Key (The Secret) :: PRIVATE | |
var $unixworld_key = ''; | |
//======================================== | |
//======================================== | |
//============================================================== | |
/** | |
* Constructor | |
* | |
* @param STRING $key Your secret key used for encryption and decryption | |
* @return blowfish_encryption | |
*/ | |
function blowfish_encryption($key) { | |
//-- | |
$this->unixworld_key = $key; | |
//-- | |
} //END FUNCTION | |
//============================================================== | |
//============================================================== | |
/** | |
* Encryption using blowfish algorithm | |
* | |
* @param string original data | |
* | |
* @return string the encrypted result | |
* | |
* @access public | |
*/ | |
function encrypt($data) { | |
//-- | |
$this->initArrays(); | |
//-- | |
//-- | |
$secret = $this->unixworld_key; | |
//-- | |
//-- | |
$encrypt = ''; | |
//-- | |
$data = trim($data); // need to be symetrical | |
//-- | |
//-- | |
for($i=0; $i<strlen($data); $i+=8) { | |
//-- | |
$block = substr($data, $i, 8); | |
//-- | |
if (strlen($block) < 8) { | |
//-- | |
//====================== FULL STR PAD | |
//-- constants | |
$pad_length = 8; | |
$pad_string = "\0"; | |
//-- inits | |
$pad_output_string = ''; // cleared (init) -> this will output the final result | |
$pad_input_string = $block; // here will be passed the input string | |
$pad_calc_length = $pad_length - strlen($pad_input_string); | |
//-- | |
if($pad_calc_length > 0) { // str_repeat doesn't like negatives | |
//-- STR_PAD_RIGHT == 1 | |
$pad_output_string = $pad_input_string.str_repeat($pad_string, $pad_calc_length); | |
//-- | |
} else { // if length is negative or zero we don't need to do anything | |
//-- | |
$pad_output_string = $pad_input_string; | |
//-- | |
} //end if else | |
//-- get final result | |
$block = $pad_output_string; | |
//-- | |
//====================== | |
//-- | |
} //end if | |
//-- | |
$encrypt .= $this->encryptBlock($block, $secret); | |
//-- | |
} //end for | |
//-- | |
//-- | |
$encrypt = base64_encode($encrypt); // need to be symetrical | |
//-- | |
//-- | |
$this->clearArrays(); | |
//-- | |
//-- | |
return $encrypt; | |
//-- | |
} //END FUNCTION | |
//============================================================== | |
//============================================================== | |
/** | |
* Decryption using blowfish algorithm | |
* | |
* @param string encrypted data | |
* | |
* @return string original data | |
* | |
* @access public | |
*/ | |
function decrypt($encdata) { | |
//-- | |
$this->initArrays(); | |
//-- | |
//-- | |
$secret = $this->unixworld_key; | |
//-- | |
//-- | |
$decrypt = ''; | |
//-- | |
//-- | |
$data = base64_decode($encdata); // need to be symetrical | |
//-- | |
//-- | |
for($i=0; $i<strlen($data); $i+=8) { | |
//-- | |
$decrypt .= $this->decryptBlock(substr($data, $i, 8), $secret); | |
//-- | |
} //END FOR | |
//-- | |
//-- | |
$decrypt = trim($decrypt); // need to be symetrical | |
//-- | |
//-- | |
$this->clearArrays(); | |
//-- | |
//-- | |
return $decrypt; | |
//-- | |
} //END FUNCTION | |
//============================================================== | |
//============================================================== | |
//============================================================== PRIVATES | |
//============================================================== | |
//============================================================== | |
// init the arrays before class execution | |
function initArrays() { | |
//-- | |
$this->p = $this->init_arr_p; | |
$this->s1 = $this->init_arr_s1; | |
$this->s2 = $this->init_arr_s2; | |
$this->s3 = $this->init_arr_s3; | |
$this->s4 = $this->init_arr_s4; | |
//-- | |
} //END FUNCTION | |
//============================================================== | |
//============================================================== | |
// clean the arrays after class execution | |
function clearArrays() { | |
//-- | |
$this->p = array(); | |
$this->s1 = array(); | |
$this->s2 = array(); | |
$this->s3 = array(); | |
$this->s4 = array(); | |
//-- | |
} //END FUNCTION | |
//============================================================== | |
//============================================================== | |
/** | |
* Set the key to be used for en/decryption | |
* | |
* @param String $key The key to use | |
*/ | |
function setKey($key) { | |
//-- | |
$key = $this->_formatKey($key); | |
$key_pos = $key_xor = 0; | |
//-- | |
//-- | |
$i_max = count($this->p); | |
$key_length = count($key); | |
//-- | |
//-- | |
for ($i=0; $i<$i_max; $i++) { | |
//-- | |
for ($t=0; $t<4; $t++) { | |
//-- | |
$key_xor = ($key_xor << 8) | (($key[$key_pos]) & 0x0ff); | |
//-- | |
if (++$key_pos == $key_length) { | |
$key_pos = 0; | |
} //end if | |
//-- | |
} //end for | |
//-- | |
$this->p[$i] = $this->p[$i] ^ $key_xor; | |
//-- | |
} //end for | |
//-- | |
//-- | |
$enc_zero = array('L'=>0, 'R'=>0); | |
//-- | |
for ($i = 0; $i + 1 < $i_max; $i += 2) { | |
$enc_zero = $this->_encryptBlock($enc_zero['L'], $enc_zero['R']); | |
$this->p[$i] = $enc_zero['L']; | |
$this->p[$i + 1] = $enc_zero['R']; | |
} //end for | |
//-- | |
//-- | |
$i_max = count($this->s1); | |
//-- | |
for ($i=0; $i<$i_max; $i+=2) { | |
$enc_zero = $this->_encryptBlock($enc_zero['L'], $enc_zero['R']); | |
$this->s1[$i] = $enc_zero['L']; | |
$this->s1[$i + 1] = $enc_zero['R']; | |
} //end for | |
//-- | |
//-- | |
$i_max = count($this->s2); | |
//-- | |
for ($i=0; $i<$i_max; $i+=2) { | |
$enc_zero = $this->_encryptBlock($enc_zero['L'], $enc_zero['R']); | |
$this->s2[$i] = $enc_zero['L']; | |
$this->s2[$i + 1] = $enc_zero['R']; | |
} //end for | |
//-- | |
//-- | |
$i_max = count($this->s3); | |
//-- | |
for ($i=0; $i<$i_max; $i+=2) { | |
$enc_zero = $this->_encryptBlock($enc_zero['L'], $enc_zero['R']); | |
$this->s3[$i] = $enc_zero['L']; | |
$this->s3[$i + 1] = $enc_zero['R']; | |
} //end for | |
//-- | |
//-- | |
$i_max = count($this->s4); | |
//-- | |
for ($i=0; $i<$i_max; $i+=2) { | |
$enc_zero = $this->_encryptBlock($enc_zero['L'], $enc_zero['R']); | |
$this->s4[$i] = $enc_zero['L']; | |
$this->s4[$i + 1] = $enc_zero['R']; | |
} //end for | |
//-- | |
} //END FUNCTION | |
//============================================================== | |
//============================================================== | |
/** | |
* Return the size of the blocks that this cipher needs | |
* | |
* @return Integer The number of characters per block | |
*/ | |
function getBlockSize() { | |
//-- | |
return 8; | |
//-- | |
} //END FUNCTION | |
//============================================================== | |
//============================================================== | |
/** | |
* Encrypt a block on data. | |
* | |
* @param String $block The data to encrypt | |
* @param optional String $key The key to use | |
* | |
* @return String the encrypted output | |
*/ | |
function encryptBlock($block, $key=null) { | |
//-- | |
if (!is_null($key)) { | |
$this->setKey($key); | |
} //end if | |
//-- | |
//-- | |
list($L, $R) = array_values(unpack('N*', $block)); | |
$parts = $this->_encryptBlock($L, $R); | |
//-- | |
//-- | |
return pack("NN", $parts['L'], $parts['R']); | |
//-- | |
} //END FUNCTION | |
//============================================================== | |
//============================================================== | |
/** | |
* Encrypt a block on data. | |
* | |
* @param String $L The data to encrypt. | |
* @param String $R The data to encrypt. | |
* | |
* @return String The encrypted output. | |
*/ | |
function _encryptBlock($L, $R) { | |
//-- | |
$L ^= $this->p[0]; | |
$R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[1]; | |
$L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[2]; | |
$R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[3]; | |
$L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[4]; | |
$R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[5]; | |
$L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[6]; | |
$R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[7]; | |
$L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[8]; | |
$R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[9]; | |
$L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[10]; | |
$R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[11]; | |
$L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[12]; | |
$R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[13]; | |
$L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[14]; | |
$R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[15]; | |
$L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[16]; | |
$R ^= $this->p[17]; | |
//-- | |
//-- | |
return array('L' => $R, 'R' => $L); | |
//-- | |
} //END FUNCTION | |
//============================================================== | |
//============================================================== | |
/** | |
* Decrypt a block on data. | |
* | |
* @param String $block The data to decrypt | |
* @param optional String $key The key to use | |
* | |
* @return String the decrypted output | |
*/ | |
function decryptBlock($block, $key=null) { | |
//-- | |
if (!is_null($key)) { | |
$this->setKey($key); | |
} //end if | |
//-- | |
//-- custom change (PMA) :: start | |
$L = null; | |
$R = null; | |
//- | |
$retarray = array_values(unpack('N*', $block)); | |
//- | |
if (isset($retarray[0])) { | |
$L = $retarray[0]; | |
} //end if | |
//- | |
if (isset($retarray[1])) { | |
$R = $retarray[1]; | |
} //end if | |
//-- custom change (PMA) :: end | |
//-- | |
$L ^= $this->p[17]; | |
$R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[16]; | |
$L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[15]; | |
$R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[14]; | |
$L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[13]; | |
$R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[12]; | |
$L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[11]; | |
$R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[10]; | |
$L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[9]; | |
$R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[8]; | |
$L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[7]; | |
$R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[6]; | |
$L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[5]; | |
$R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[4]; | |
$L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[3]; | |
$R ^= ((($this->s1[($L >> 24) & 0xFF] + $this->s2[($L >> 16) & 0x0ff]) ^ $this->s3[($L >> 8) & 0x0ff]) + $this->s4[$L & 0x0ff]) ^ $this->p[2]; | |
$L ^= ((($this->s1[($R >> 24) & 0xFF] + $this->s2[($R >> 16) & 0x0ff]) ^ $this->s3[($R >> 8) & 0x0ff]) + $this->s4[$R & 0x0ff]) ^ $this->p[1]; | |
//-- | |
//-- | |
$decrypted = pack("NN", $R ^ $this->p[0], $L); | |
//-- | |
//-- | |
return $decrypted; | |
//-- | |
} //END FUNCTION | |
//============================================================== | |
//============================================================== | |
/** | |
* Converts a text key into an array. | |
* | |
* @return array The key. | |
*/ | |
function _formatKey($key) { | |
//-- | |
return array_values(unpack('C*', $key)); | |
//-- | |
} //END FUNCTION | |
//============================================================== | |
//============================================================== | |
//============================================================== | |
//------------------------------------ | |
//-- # EXAMPLE USAGE: | |
// $crypt = new blowfish_encryption('the secret'); | |
// $enc_text = $crypt->encrypt('text to be encrypted'); | |
// $dec_text = $crypt->decrypt($enc_text); | |
//-- # END | |
//------------------------------------ | |
} //END CLASS | |
//===================================================================================== | |
//===================================================================================== CLASS END | |
//===================================================================================== | |
// end of php code | |
?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Horrifying!