XXTea アルゴリズムをテストすると、文字列を復元できる PHP バージョンがインターネット上にありません。これはあまりにも奇妙です。
原文="あなたは私のものです,sdfsdfsdfasd,error4&:1234/?.,3&%$#@@";
復元 =あなたは私のものです、sdfsdfsdfasd、エラー &:1234/?., &%$#@@;
3に遭遇する限り、それは機能しません。また、4、5、6、7、8、9 という個別の番号もあり、復元できるものと復元できないものがあります。
インターネット上の XXTea アルゴリズムのすべての PHP バージョンは基本的にテストされており、それらはすべて同じ問題を抱えていますが、これは非常に奇妙なことです。アドバイスをくれる専門家はいますか?
<?php<br /> クラス Xxtea {<br /> public function encrypt($s, $key) {<br /> return self :: xxtea_encrypt($s, $key);<br /> }<br /> public function decrypt($e, $key) {<br /> return self :: xxtea_decrypt($e, $key);<br /> }<br /> プライベート関数long2str($v, $w) {<br /> $len = count($v);<br /> $n = ($len -1) <br /> if ($w) {<br /> $m = $v[$len -1];<br /> if (($m < $n -3) || ($m > $n))<br /> false を返します;<br /> $n = $m;<br /> }<br /> $s = 配列 ();<br /> for ($i = 0; $i <$len; $i ) {<br /> $s[$i] = パック("V", $v[$i]);<br /> }<br /> if ($w) {<br /> return substr(join('', $s), 0, $n);<br /> } else {<br /> return join('', $s);<br /> }<br /> }<br /> プライベート関数 str2long($s, $w) {<br /> $v = unpack("V*", $s .str_repeat(" $v = array_values($v);<br /> if ($w) {<br /> $v[count($v)] = strlen($s);<br /> }<br /> $v を返す;<br /> }<br /> プライベート関数 int32($n) {<br /> while ($n >= 2147483648)<br /> $n -= 4294967296;<br /> while ($n <= -2147483649)<br /> $n = 4294967296;<br /> return (int) $n;<br /> }<br /> プライベート関数 xxtea_encrypt($str, $key) {<br /> if ($str == "") {<br /> "" を返します;<br /> }<br /> $v = self :: str2long($str, true);<br /> $k = self :: str2long($key, false);<br /> if (count($k) < 4) {<br /> for ($i = count($k); $i < 4; $i ) {<br /> $k[$i] = 0;<br /> }<br /> }<br /> $n = count($v) - 1;<br /> $z = $v[$n];<br /> $y = $v[0];<br /> $delta = 0x9E3779B9;<br /> $q = フロア(6 52 / ($n 1));<br /> $sum = 0;<br /> <br /> while (0 < $q--) {<br /> $sum = self :: int32($sum $delta);<br /> $e = $sum >> 2 & 3;<br> for ($p = 0; $p $y = $v[$p 1];<br> $mx = self :: int32((($z >> 5 & 0x07ffffff) ^ $y << 2) (($y >> 3 & 0x1fffffff) ^ $z << 4) ) ^ self :: int32(($sum ^ $y) ($k[$p & 3 ^ $e] ^ $z));<br /> $z = $v[$p] = self :: int32($v[$p] $mx);<br /> }<br /> $y = $v[0];<br /> $mx = self :: int32((($z >> 5 & 0x07ffffff) ^ $y << 2) (($y >> 3 & 0x1fffffff) ^ $z << 4) ) ^ self :: int32(($sum ^ $y) ($k[$p & 3 ^ $e] ^ $z));<br> $z = $v[$n] = self :: int32($v[$n] $mx);<br> }<br> return self ::long2str($v, false);