Menu

[r5]: / phprpc_2.1 / include / xxtea.php  Maximize  Restore  History

Download this file

92 lines (84 with data), 2.6 kB

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
<?php
/**
* @author Ma Bingyao(andot@ujn.edu.cn)
* @copyright CoolCode.CN
* @package XXTEA
* @version 1.1
* @lastupdate 2006-03-07
* @link http://www.coolcode.cn/?p=128
*/
function long2str($v, $w) {
$len = count($v);
$s = array();
for ($i = 0; $i < $len; $i++)
{
$s[$i] = pack("V", $v[$i] & 0xffffffff);
}
if ($w) {
return substr(join('', $s), 0, $v[$len - 1] & 0xffffffff);
}
else {
return join('', $s);
}
}
function str2long($s, $w) {
$v = unpack("V*", $s. str_repeat("\0", (4 - strlen($s) % 4) & 3));
$v = array_values($v);
if ($w) {
$v[count($v)] = strlen($s);
}
return $v;
}
function xxtea_encrypt($str, $key) {
if ($str == "") {
return "";
}
$v = str2long($str, true);
$k = str2long($key, false);
$n = count($v);
$z = $v[$n - 1];
$y = $v[0];
$delta = 0x9E3779B9;
$q = (int)(6 + 52 / $n);
$sum = 0;
while ($q-- > 0) {
$sum = $sum + $delta & 0xffffffff;
$e = $sum >> 2 & 3;
for ($p = 0; $p < $n - 1; $p++) {
$y = $v[$p + 1];
$mx = (($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4) ^ ($sum ^ $y) + ($k[$p & 3 ^ $e] ^ $z);
$z = $v[$p] = $v[$p] + $mx & 0xffffffff;
}
$y = $v[0];
$mx = (($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4) ^ ($sum ^ $y) + ($k[$p & 3 ^ $e] ^ $z);
$z = $v[$n - 1] = $v[$n - 1] + $mx & 0xffffffff;
}
return long2str($v, false);
}
function xxtea_decrypt($str, $key) {
if ($str == "") {
return "";
}
$v = str2long($str, false);
$k = str2long($key, false);
$n = count($v);
$z = $v[$n - 1];
$y = $v[0];
$delta = 0x9E3779B9;
$q = (int)(6 + 52 / $n);
$sum = $q * $delta & 0xffffffff;
while ($sum != 0) {
$e = $sum >> 2 & 3;
for ($p = $n - 1; $p > 0; $p--) {
$z = $v[$p - 1];
$mx = (($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4) ^ ($sum ^ $y) + ($k[$p & 3 ^ $e] ^ $z);
$y = $v[$p] = $v[$p] - $mx & 0xffffffff;
}
$z = $v[$n - 1];
$mx = (($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4) ^ ($sum ^ $y) + ($k[$p & 3 ^ $e] ^ $z);
$y = $v[0] = $v[0] - $mx & 0xffffffff;
$sum = $sum - $delta & 0xffffffff;
}
return long2str($v, true);
}
?>
Want the latest updates on software, tech news, and AI?
Get latest updates about software, tech news, and AI from SourceForge directly in your inbox once a month.