`
wangduowu
  • 浏览: 135435 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

XXTEA 加密算法的 PHP 实现

    博客分类:
  • php
阅读更多
<?php
    /* XXTEA encryption arithmetic library.
    *
    * Copyright (C) 2006 Ma Bingyao <andot@ujn.edu.cn>
    * Version:      1.5
    * LastModified: Dec 5, 2006
    * This library is free.  You can redistribute it and/or modify it.
    */

   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]);
       }
       if ($w) {
           return substr(join('', $s), 0, $n);
       }
       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 int32($n) {
       while ($n >= 2147483648) $n -= 4294967296;
       while ($n <= -2147483649) $n += 4294967296;
       return (int)$n;
   }

   function xxtea_encrypt($str, $key) {
       if ($str == "") {
           return "";
       }
       $v = str2long($str, true);
       $k = str2long($key, false);
       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 = int32($sum + $delta);
           $e = $sum >> 2 & 3;
           for ($p = 0; $p < $n; $p++) {
               $y = $v[$p + 1];
               $mx = int32((($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4))
               		^ int32(($sum ^ $y) + ($k[$p & 3 ^ $e] ^ $z));
               $z = $v[$p] = int32($v[$p] + $mx);
           }
           $y = $v[0];
           $mx = int32((($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4))
           		^ int32(($sum ^ $y) + ($k[$p & 3 ^ $e] ^ $z));
           $z = $v[$n] = int32($v[$n] + $mx);
       }
       return long2str($v, false);
   }

   function xxtea_decrypt($str, $key) {
       if ($str == "") {
           return "";
       }
       $v = str2long($str, false);
       $k = str2long($key, false);
       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 = int32($q * $delta);
       while ($sum != 0) {
           $e = $sum >> 2 & 3;
           for ($p = $n; $p > 0; $p--) {
               $z = $v[$p - 1];
              $mx = int32((($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4)) 
^ int32(($sum ^ $y) + ($k[$p & 3 ^ $e] ^ $z));
              $y = $v[$p] = int32($v[$p] - $mx);
          }
          $z = $v[$n];
          $mx = int32((($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4)) 
^ int32(($sum ^ $y) + ($k[$p & 3 ^ $e] ^ $z));
          $y = $v[0] = int32($v[0] - $mx);
          $sum = int32($sum - $delta);
      }
      return long2str($v, true);
  }


$key = '1234567890123456';
$SS = unpack('H*', 'pl00:00:00:00:00:001120000501182001120500020');
foreach($SS as $key){
	echo $key."<br>";
}
$e = base64_encode(xxtea_encrypt($SS, $key));
echo $e."<br>";

$d = xxtea_decrypt(base64_decode($e), $key);
echo  $d."<br>";

?>

 

 

原作者:andot
原文网址:http://www.coolcode.cn/show-128-1.html

 

 

分享到:
评论

相关推荐

    XXTEA加密算法各种语言实现整理

    在提供的文件列表中,我们看到了多种编程语言实现的XXTEA加密算法版本,包括Java、JavaScript、PHP、C#、ActionScript、C和Delphi。这些实现旨在让开发者在不同平台上轻松地使用XXTEA进行数据加密和解密。 1. **...

    PHP的XXTEA加密算法扩展.zip

    总结来说,PHP的XXTEA加密算法扩展提供了一种在PHP环境中实现XXTEA加密的方法,适用于需要对数据进行快速、简单加密的场景。然而,由于密码学的不断发展,开发者应考虑使用更为现代的加密标准,如AES,以提供更高的...

    xxtea-php, PHP的XXTEA加密算法库.zip

    xxtea-php, PHP的XXTEA加密算法库 用于 PHP 的 XXTEA 简介XXTEA是一种快速安全的加密算法。 这是一个PHP的XXTEA库。它与原始的XXTEA加密算法不同。 它加密和解密字符串而不是 uint32 array,密钥也是字符串。安装

    XXTEA加密使用代码

    总结起来,XXTEA加密算法是一种古老的加密技术,适用于资源有限的环境,但现代安全实践中更倾向于使用像AES这样的现代加密标准。使用XXTEA时,应考虑其安全性和性能,结合适当的密钥管理和填充策略。

    PHP实现的XXTEA加密解密算法示例

    PHP中的XXTEA加密解密算法实现主要包括以下几个关键步骤和函数: 1. **long2str** 和 **str2long** 函数: 这两个辅助函数分别用于将长整型数组转换为字符串和将字符串转换为长整型数组。在加密和解密过程中,数据...

    yii2-xxtea:yii2 加密算法“XXTEA”的扩展

    yii2 加密算法“XXTEA”的扩展 安装 在composer.json : { "require": { "rmrevin/yii2-xxtea": "1.2.0" } } 配置 /protected/config/main.php &lt;? return array ( // ... 'components' =&gt; array ( // .....

    phprpc_3.0.1_delphi

    在标签中提到了"xxtea",这表明Phprpc_3.0.1_Delphi可能采用了XXTEA加密算法来保护数据的安全性。XXTEA是一种块密码,用于加密小块数据,如字符串或结构体。它提供了良好的加密强度,并且特别适合于简单的数据结构和...

    xtea-js:纯JavaScript XTEA块密码实现(与PHP MCRYPT_XTEA兼容),支持ECB和CBC操作模式以及PKCS7填充

    密码算法非常有效,并且受到PHP的密码扩展的支持(与XXTEA密码相反),因此当您需要JS和PHP之间的互操作性并且不需要更强大的密码学时,您可能会发现此模块很有用。原料药该模块导出四个功能:加密(msg,密钥,...

Global site tag (gtag.js) - Google Analytics