4 * Allows encrypt and decrypt
9 * Gets a random value for encryption
13 * length of random variable
15 function getRndIV($iv_len) {
18 while ($iv_len-- > 0) {
19 $iv .= chr(mt_rand() & 0xff);
31 * password to use for encryption
33 * length of random number
35 function encrypt($str, $salt, $iv_len = 16) {
39 if ($n % 16) $str .= str_repeat("\0", 16 - ($n % 16));
41 $enc_text = $this->getRndIV($iv_len);
42 $iv = substr($salt ^ $enc_text, 0, 512);
44 $block = substr($str, $i, 16) ^ pack('H*', md5($iv));
46 $iv = substr($block . $iv, 0, 512) ^ $salt;
49 return urlencode(base64_encode($enc_text));
57 * encrypted string to decrypt
59 * password to use for encryption
61 * length of random number
63 function decrypt($enc, $salt, $iv_len = 16) {
65 $enc = urldecode(base64_decode($enc));
69 $iv = substr($salt ^ substr($enc, 0, $iv_len), 0, 512);
71 $block = substr($enc, $i, 16);
72 $str .= $block ^ pack('H*', md5($iv));
73 $iv = substr($block . $iv, 0, 512) ^ $salt;
76 return preg_replace('/\\x13\\x00*$/', '', $str);