`
wangduowu
  • 浏览: 134390 次
  • 性别: 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. **...

    XXTEA加密算法源码

    TEA(Tiny Encryption Algorithm)是一种小型的对称加密解密算法,支持128位密码,与BlowFish一样TEA每次只能加密/解密8字节数据。TEA特点是速度快、效率高,实现也非常简单。由于针对TEA的攻击不断出现,所以TEA也发展出...

    XXTEA加密算法的C代码实现

    “微型加密算法(TEA)及其相关变种(XTEA,Block TEA,XXTEA)都是分组加密算法,它们很容易被描述,实现也很简单(典型的几行代码)。 TEA 算法最初是由剑桥计算机实验室的 David Wheeler 和 Roger Needham 在 ...

    XXtea加密算法(C++)

    - **加密函数**: 定义了XXtea算法的具体实现,接受输入数据和密钥,返回加密后的结果。 - **解密函数**: 对加密后的数据进行解密,恢复原始数据。 - **密钥管理**: 可能包含创建、存储和管理密钥的机制。 - **错误...

    Python的XXTEA加密算法库.zip

    XXTEA(Extreme eXtended TEA,极度扩展的TEA)是一种对称加密算法,由David Wheeler和Roger Needham在1994年提出,是对Tiny Encryption Algorithm(TEA)的改进版本。TEA虽然简洁,但在某些情况下可能不够安全,而...

    PHP的XXTEA加密算法扩展.zip

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

    xxtea-java, Java的XXTEA加密算法库.zip

    xxtea-java, Java的XXTEA加密算法库 用于 Java 的 XXTEA 简介XXTEA是一种快速安全的加密算法。 这是一个用于Java的XXTEA库。它与原始的XXTEA加密算法不同。 它加密和解密字节 [] 而不是 32bit 整数 array,键也

    XXtea 加密算法的JS实现和C#实现(源码)

    两者都提供了XXTEA算法的实现,使得在不同的平台和环境中都能实现数据的安全加密和解密。 `xxtea.cs`文件包含C#版本的XXTEA算法实现。C#中的XXTEA算法通常会定义一个类,包含加密和解密的静态方法,接受一个字节...

    XXTea 加密算法的 Objective-C 包装器_代码_下载

    这个Objective-C包装器简化了XXTea的使用流程,让开发者能够更专注于应用程序的主要功能,而无需深入理解加密算法的底层实现细节。 总的来说,XXTea加密算法的Objective-C包装器为iOS和Mac开发者提供了一种便捷的...

    xxtea加密工具 附c++源码

    - `src`目录可能包含源代码,其中可能有XXTEA加密算法的实现,以及用于集成到Cocos2d-x项目的代码。 - `res`目录可能包含加密前的资源文件,这些文件会被`xxtea_encode.exe`加密。 - `cpp_code`可能包含C++源代码...

    XXTEA.zip_XXTEA_XXTEA加密算法_xxtea下载_xxtea加密工具

    一个很小巧的加密算法,加解密速度非常快,也很安全!!

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

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

    SQLite-XXTEA加密-DLL

    这几日有时间,自己就用XXTEA算法在 SQLite3.3.7版本的基础上实现了加密功能。选择XXTEA主要是因为这个算法速度很快,对性能造成的影响相对较小。顺便修改了网上流传的XXTEA代码的一处内存越界的BUG。 用SQLite的...

    SQLite-XXTEA加密-源代码

    这几日有时间,自己就用XXTEA算法在 SQLite3.3.7版本的基础上实现了加密功能。选择XXTEA主要是因为这个算法速度很快,对性能造成的影响相对较小。顺便修改了网上流传的XXTEA代码的一处内存越界的BUG。 用SQLite的...

    DELPHI 的 XXTEA加密算法

    高于TEA的加密算法,值得使用!破解时间比TEA时间要长。

    xxtea/aes加密解密工具

    XXtea和AES是两种常用的加密算法,用于保护数据的安全性,尤其在软件开发和网络通信中广泛应用。在本文中,我们将深入探讨这两种加密算法以及如何使用它们进行加密和解密。 1. **XXtea加密算法**: XXtea,全称...

    XXTea 加密类 c#

    XXTea 加密类 c#

    XXTEA加密使用代码

    XXTEA(Extreme eXtended TEA)是一种对称加密算法,由David Wheeler和Roger Needham在1994年提出,是对TEA(Tiny Encryption Algorithm)的增强版本。它设计简洁,易于实现,适合在资源有限的环境中使用,如嵌入式...

    XXTEA加密解密 iOS 的 Objective-C 完美实现

    总之,XXTEA加密算法为iOS应用提供了安全的数据保护手段,而Objective-C的实现则让开发者能够在苹果平台上方便地集成这一功能。理解并掌握XXTEA的工作原理和Objective-C的实现方式,有助于提升iOS应用的安全性,防止...

    XXTEA算法 C实现

    XXTEA算法的C语言实现,内含测试代码,编译后可直接运行

Global site tag (gtag.js) - Google Analytics