`
jordan_micle
  • 浏览: 246199 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

PHP小记|xxtea类

 
阅读更多

xxtea可逆加密算法PHP实现:

 

Class Xxtea {
	public function encrypt($s, $key) {
		return base64_encode(self :: xxtea_encrypt($s, $key));
	}
	public function decrypt($e, $key) {
		return self :: xxtea_decrypt(base64_decode($e), $key);
	}
	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]);
		}
		if ($w) {
			return substr(join('', $s), 0, $n);
		} else {
			return join('', $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;
	}
	private function xxtea_encrypt($str, $key) {
		if ($str == "") {
			return "";
		}
		$v = self :: str2long($str, true);
		$k = self :: 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 = self :: int32($sum + $delta);
			$e = $sum >> 2 & 3;
			for ($p = 0; $p < $n; $p++) {
				$y = $v[$p +1];
				$mx = self :: int32((($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4)) ^ self :: int32(($sum ^ $y) + ($k[$p & 3 ^ $e] ^ $z));
				$z = $v[$p] = self :: int32($v[$p] + $mx);
			}
			$y = $v[0];
			$mx = self :: int32((($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4)) ^ self :: int32(($sum ^ $y) + ($k[$p & 3 ^ $e] ^ $z));
			$z = $v[$n] = self :: int32($v[$n] + $mx);
		}
		return self :: long2str($v, false);
	}
	private function xxtea_decrypt($str, $key) {
		if ($str == "") {
			return "";
		}
		$v = self :: str2long($str, false);
		$k = self :: 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 = self :: int32($q * $delta);

		while ($sum != 0) {
			$e = $sum >> 2 & 3;
			for ($p = $n; $p > 0; $p--) {
				$z = $v[$p -1];
				$mx = self :: int32((($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4)) ^ self :: int32(($sum ^ $y) + ($k[$p & 3 ^ $e] ^ $z));
				$y = $v[$p] = self :: int32($v[$p] - $mx);
			}
			$z = $v[$n];
			$mx = self :: int32((($z >> 5 & 0x07ffffff) ^ $y << 2) + (($y >> 3 & 0x1fffffff) ^ $z << 4)) ^ self :: int32(($sum ^ $y) + ($k[$p & 3 ^ $e] ^ $z));
			$y = $v[0] = self :: int32($v[0] - $mx);
			$sum = self :: int32($sum - $delta);
		}
		return self :: long2str($v, true);
	}
}

 

使用方法:

加密:

Xxtea::encrypt(明文字符串, 密钥字符串);

解密:

Xxtea::decrypt(密文字符串, 密钥字符串);

 

分享到:
评论
1 楼 Sobfist 2013-01-22  
有无java实现 请指教 我试了下 解密报错 感觉是字符集的问题

相关推荐

    PyPI 官网下载 | xxtea-1.3.0-cp36-cp36m-win32.whl

    **PyPI 官网下载 | xxtea-1.3.0-cp36-cp36m-win32.whl 知识点详解** 在Python编程领域,`PyPI`(Python Package Index) 是一个官方的第三方软件包仓库,开发者可以在这里发布他们的Python库,而使用者则可以通过它来...

    Python库 | xxtea-2.0.0.post0-cp35-cp35m-win_amd64.whl

    本资源是一个名为"xxtea-2.0.0.post0-cp35-cp35m-win_amd64.whl"的Python库文件,适用于Python 3.5版本,并且是为64位Windows系统设计的。该库主要用于加密和解密数据,特别适合那些需要在Python项目中进行数据安全...

    Python库 | xxtea-1.3.0-cp35-cp35m-manylinux1_x86_64.whl

    **Python库xxtea-1.3.0-cp35-cp35m-manylinux1_x86_64.whl详解** `xxtea-1.3.0-cp35-cp35m-manylinux1_x86_64.whl` 是一个针对Python编程语言的扩展库,其主要功能是提供了XXTEA加密算法的实现。XXTEA(eXtended ...

    Python库 | xxtea-2.0.0.post0-cp38-cp38-win_amd64.whl

    资源分类:Python库 所属语言:Python 使用前提:需要解压 资源全名:xxtea-2.0.0.post0-cp38-cp38-win_amd64.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    PyPI 官网下载 | xxtea-1.3.0-cp35-cp35m-manylinux1_x86_64.whl

    资源来自pypi官网。 资源全名:xxtea-1.3.0-cp35-cp35m-manylinux1_x86_64.whl

    PyPI 官网下载 | xxtea-2.0.0.post0-cp35-cp35m-win_amd64.whl

    资源来自pypi官网。 资源全名:xxtea-2.0.0.post0-cp35-cp35m-win_amd64.whl

    PHP的XXTEA加密算法扩展.zip

    **PHP的XXTEA加密算法扩展** XXTEA(Extreme eXtended TEA),是一种在1998年由David Wheeler和Roger Needham提出的高效、安全的块密码算法。它是TEA(Tiny Encryption Algorithm)的增强版本,修复了TEA算法的一些...

    XXTea 加密类 c#

    XXTea 加密类 c#

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

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

    xxtea.rar_XXTEA

    XXTEA算法是一种高效、简洁的微积分加密算法,由David Wheeler和Roger Needham于1994年提出,主要用于短数据块的加密。在给定的“xxtea.rar_XXTEA”压缩包中,我们可以看到一个名为“hello”的文件,这可能是用XXTEA...

    xxtea_java.rar_XXTEA_XXTEA java_java XXTEA_java加解密

    XXTEA(Extreme eXtended TEA,极度扩展的TEA)是一种简单的加密算法,由David Wheeler和Roger Needham在1994年提出。它是对Tiny Encryption Algorithm(TEA)的一种改进,旨在解决TEA存在的微小弱点。XXTEA在保持...

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

    Java版的XXTEA通常会包含一个类,提供加密和解密方法,接受字节数组作为输入,并返回加密或解密后的字节数组。 2. **JavaScript实现(xxtea.js)**:JavaScript是用于网页和网络应用的脚本语言,XXTEA.js版本适用于...

    xxtea加密工具 附c++源码

    在游戏开发,特别是Cocos2d-x与Cocos2d-lua项目中,XXTEA加密常用于保护资源文件和代码,防止未授权访问和破解。以下是关于XXTEA加密以及如何在C++和Cocos2d-x环境中应用的详细知识: 1. XXTEA加密算法: - XXTEA...

    c#_xxtea加解密

    XXTEA(Extreme eXtended eXtremely Fast Data Encryption Algorithm)是一种快速且高效的块密码算法,由David Wheeler和Ross J. Anderson于1998年提出。它主要用于小型数据块加密,如网络传输中的小数据包或者内存...

    Python的XXTEA加密算法库.zip

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

    XXTEA加密使用代码

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

    XXTEA加密算法的C代码实现

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

    xxtea/aes加密解密工具

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

Global site tag (gtag.js) - Google Analytics