欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

测试XXTea算法,网上没有一个php版本能还原小弟我的字符串,太奇葩了

程序员文章站 2024-02-06 10:13:58
...
测试XXTea算法,网上没有一个php版本能还原我的字符串,太奇葩了。
原文="你是我的,sdfsdfsdfasd,error\4&:1234/?.,\3&%$#@@";
还原过的 =你是我的,sdfsdfsdfasd,error&:1234/?.,&%$#@@;

只要遇到 \3,就不行。还有个别的\4,5,6,7,8,9,有的能还原,有的不能。

网上的所有php版本的XXTea算法基本都测试过,全是同样的问题,很奇怪。有高手吗指点一二?

Class Xxtea {
public function encrypt($s, $key) {
return self :: xxtea_encrypt($s, $key);
}
public function decrypt($e, $key) {
return self :: xxtea_decrypt($e, $key);
}
private function long2str($v, $w) {
$len = count($v);
$n = ($len -1) if ($w) {
$m = $v[$len -1];
if (($m $n))
return false;
$n = $m;
}
$s = array ();
for ($i = 0; $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("\0", (4 - strlen($s) % 4) & 3));
$v = array_values($v);
if ($w) {
$v[count($v)] = strlen($s);
}
return $v;
}
private function int32($n) {
while ($n >= 2147483648)
$n -= 4294967296;
while ($n $n += 4294967296;
return (int) $n;
}
private function xxtea_encrypt($str, $key) {
if ($str == "") {
return "";
}
$v = self :: str2long($str, true);
$k = self :: str2long($key, false);
if (count($k) for ($i = count($k); $i $k[$i] = 0;
}
}
$n = count($v) - 1;
$z = $v[$n];
$y = $v[0];
$delta = 0x9E3779B9;
$q = floor(6 + 52 / ($n +1));
$sum = 0;

while (0 $sum = self :: int32($sum + $delta);
$e = $sum >> 2 & 3;
for ($p = 0; $p $y = $v[$p +1];
$mx = self :: int32((($z >> 5 & 0x07ffffff) ^ $y > 3 & 0x1fffffff) ^ $z $z = $v[$p] = self :: int32($v[$p] + $mx);
}
$y = $v[0];
$mx = self :: int32((($z >> 5 & 0x07ffffff) ^ $y > 3 & 0x1fffffff) ^ $z $z = $v[$n] = self :: int32($v[$n] + $mx);
}
return self :: long2str($v, false);
测试XXTea算法,网上没有一个php版本能还原小弟我的字符串,太奇葩了

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

相关文章

相关视频