ホームページ > バックエンド開発 > PHPチュートリアル > XXTea アルゴリズムをテストしています。インターネット上には文字列を復元できる PHP バージョンがありません。

XXTea アルゴリズムをテストしています。インターネット上には文字列を復元できる PHP バージョンがありません。

WBOY
リリース: 2016-06-13 12:46:13
オリジナル
923 人が閲覧しました

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);
ログイン後にコピー
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート