PHP Small |xxtea class
Xxtea Reversible Encryption algorithm PHP implementation:
?
Class Xxtea {Public function encrypt ($s, $key) {return Base64_encode (self:: Xxtea_encrypt ($s, $key));} Public function Decrypt ($e, $key) {Return to Self:: Xxtea_decrypt (Base64_decode ($e), $key);} Private Function Long2str ($v, $w) {$len = count ($v), $n = ($len-1) << 2;if ($w) {$m = $v [$len -1];if (($m < $n-3 ) || ($m > $n)) return false; $n = $m;} $s = array (); for ($i = 0; $i < $len; $i + +) {$s [$i] = Pack ("V", $v [$i]);} if ($w) {return substr (join (', $s), 0, $n),} else {return join (', $s)}} Private Function Str2long ($s, $w) {$v = unpack ("v*", $s. Str_repeat ("n", (4-strlen ($s)% 4) & 3)); $v = Array_value S ($v), if ($w) {$v [count ($v)] = strlen ($s);} return $v;} Private function Int32 ($n) {while ($n >= 2147483648) $n-= 4294967296;while ($n <= -2147483649) $n + = 4294967296;retur n (int) $n;} Private Function Xxtea_encrypt ($STR, $key) {if ($str = = "") {return "";} $v = self:: Str2long ($str, true), $k = self:: Str2long ($key, False), if (count ($k) < 4) {for ($i = count ($k);$i < 4; $i + +) {$k [$i] = 0;}} $n = count ($v)-1; $z = $v [$n]; $y = $v [0]; $delta = 0x9e3779b9; $q = Floor (6 +/($n + 1)); $sum = 0;while (0 < $q-) {$ sum = self:: Int32 ($sum + $delta), $e = $sum >> 2 & 3;for ($p = 0; $p < $n; $p + +) {$y = $v [$p +1]; $mx = self :: Int32 ((($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4)) ^ Self: : Int32 (($sum ^ $y) + ($k [$p & 3 ^ $e] ^ $z)); $z = $v [$p] = self:: Int32 ($v [$p] + $mx);} $y = $v [0]; $mx = self:: Int32 ((($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4) ^ Self:: Int32 (($sum ^ $y) + ($k [$p & 3 ^ $e] ^ $z)), $z = $v [$n] = self:: Int32 ($v [$n] + $mx);} Return self:: Long2str ($v, false);} Private Function Xxtea_decrypt ($STR, $key) {if ($str = = "") {return "";} $v = self:: Str2long ($str, false), $k = self:: Str2long ($key, False), if (count ($k) < 4) {for ($i = count ($k); $i < 4; $i + +) {$k [$i] = 0;}} $n = count ($v)-1;$z = $v [$n]; $y = $v [0]; $delta = 0x9e3779b9; $q = Floor (6 +/($n + 1)), $sum = self:: Int32 ($q * $delta), while ($sum! = 0) {$e = $sum >> 2 & 3;for ($p = $n; $p > 0; $p-) {$z = $v [$p-1]; $mx = self:: Int32 ((($z >> 5 & 0x 07FFFFFF) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4)) ^ Self:: Int32 (($sum ^ $y) + ($k [$p & ; 3 ^ $e] ^ $z)), $y = $v [$p] = self:: Int32 ($v [$p]-$mx);} $z = $v [$n]; $mx = self:: Int32 ((($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $ Z << 4)) ^ Self:: Int32 (($sum ^ $y) + ($k [$p & 3 ^ $e] ^ $z)), $y = $v [0] = self:: int32 ($v [0]-$mx); $sum = SE LF:: Int32 ($sum-$delta);} Return self:: Long2str ($v, True);}}
?
How to use:
Encryption:
Xxtea::encrypt (PlainText string, key string);
Decrypt:
Xxtea::d ecrypt (ciphertext string, key string);
?