温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

怎么在PHP中实现一个XXTEA加密解密算法

发布时间:2021-04-07 16:55:28 阅读:282 作者:Leah 栏目:开发技术
PHP开发者专用服务器限时活动,0元免费领,库存有限,领完即止! 点击查看>>

这篇文章给大家介绍怎么在PHP中实现一个XXTEA加密解密算法,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

具体如下:

<?php
/**
 * Xxtea 加密实现类
 */
class xxtea {
  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]);
    return $w substr(implode(''$s), 0$n) : implode(''$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 <= 2147483649)
      $n += 4294967296;
    return (int$n;
  }
  public function encrypt($str$key) {
    if ($str == '')
      return '';
    $v $this->str2long($strtrue);
    $k $this->str2long($keyfalse);
    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 + 52 / ($n +1));
    $sum 0;
    while (0 < $q--) {
      $sum $this->int32($sum $delta);
      $e $sum >> 2 & 3;
      for ($p 0$p $n$p++) {
        $y $v[$p +1];
        $mx $this->int32((($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4)) ^ $this->int32(($sum $y) + ($k[$p 3 ^ $e] ^ $z));
        $z $v[$p] = $this->int32($v[$p] + $mx);
      }
      $y $v[0];
      $mx $this->int32((($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4)) ^ $this->int32(($sum $y) + ($k[$p 3 ^ $e] ^ $z));
      $z $v[$n] = $this->int32($v[$n] + $mx);
    }
    return $this->long2str($vfalse);
  }
  public function decrypt($str$key) {
    if ($str == '')
      return '';
    $v $this->str2long($strfalse);
    $k $this->str2long($keyfalse);
    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 + 52 / ($n +1));
    $sum $this->int32($q $delta);
    while ($sum != 0) {
      $e $sum >> 2 & 3;
      for ($p $n$p 0$p--) {
        $z $v[$p -1];
        $mx $this->int32((($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4)) ^ $this->int32(($sum $y) + ($k[$p 3 ^ $e] ^ $z));
        $y $v[$p] = $this->int32($v[$p] - $mx);
      }
      $z $v[$n];
      $mx $this->int32((($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4)) ^ $this->int32(($sum $y) + ($k[$p 3 ^ $e] ^ $z));
      $y $v[0] = $this->int32($v[0] - $mx);
      $sum $this->int32($sum $delta);
    }
    return $this->long2str($vtrue);
  }
}
//用法测试:
$strDemo "www.yisu.com";
$key "123456";
$pwd new Xxtea();
$pwdrel $pwd->encrypt($strDemo$key);
echo $pwdrel;
echo "<br/>";
echo $pwd->decrypt($pwdrel$key);
?>

运行结果:

{���H(�S��7*�u7U

www.yisu.com


关于怎么在PHP中实现一个XXTEA加密解密算法就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI

开发者交流群×