`
berrywu
  • 浏览: 128345 次
  • 性别: Icon_minigender_1
  • 来自: 福建
社区版块
存档分类
最新评论

xxtea对称加密解密算法

 
阅读更多
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);
	}
}
 
分享到:
评论
1 楼 Sobfist 2013-01-22  
我想问有没有java的实现呢? 请指教 我网上的xxtea的java实现 和base64结合使用 结果老是在解密的时候报错。如果博主有的话 请回复我谢谢了

相关推荐

    xxtea/aes加密解密工具

    总结来说,XXtea/aes加密解密工具结合了XXtea和AES两种加密算法,利用OpenSSL库提供强大的加密能力,同时支持lua语言集成,适用于游戏开发和数据保护场景。通过使用这样的工具,开发者可以更便捷地对文件和数据进行...

    XXTEA加密算法源码

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

    Python的XXTEA加密算法库.zip

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

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

    XXTEA(Extreme eXtended TEA,极度扩展的TEA)是一种对称加密算法,由David Wheeler和Roger Needham在1994年提出,是对Tiny Encryption Algorithm(TEA)的改进版本。它提供了更好的安全性和效率,被广泛用于软件和...

    XXTEA用于加密算法库JavaScript。.zip

    XXTEA(Extreme eXtended TEA,极度扩展的TEA)是一种对称加密算法,主要用于简单且高效的数据加密。这个"XXTEA用于加密算法库JavaScript"的压缩包包含了一个JavaScript实现的XXTEA加密库,名为"xxtea-js-master"。...

    基于Java开发的数据加密解密工具.zip

    基于Java开发的数据加密解密工具,可对字符串和文件类型进行加密解密,支持AES、DES和3DES三种常用的对称加密算法。

    XXTEA加密使用代码

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

    xxtea-lib:Arduino的XXTEA加密和解密库

    XXTEA(eXtended XTEA)是一种对称加密算法,它是在原始XTEA(块大小为64位的简单数据加密标准)基础上进行改进的。在物联网(IoT)设备,特别是基于Arduino平台的项目中,数据安全是至关重要的。xxtea-lib是一个...

    一种适用于RFID读写器的加密算法及其实现

    XXTEA算法是一种迭代对称加密算法,其特点包括简单的结构,易于硬件实现,并且软件实现代码短小,具有良好的可移植性。这些特点使得XXTEA非常适合用于资源受限的嵌入式RFID系统。XXTEA算法的加密轮次取决于数据长度...

    JAVA 文件加密解密(附源码)

    常见的加密算法包括对称加密和非对称加密。 1. 对称加密:在这种方法中,加密和解密使用相同的密钥。例如,DES(Data Encryption Standard)、3DES(Triple DES)和AES(Advanced Encryption Standard)都是常用的...

    AES加密、解密(linux、window加密解密效果一致,支持中文)

    标题中的“AES加密、解密”指的是Advanced Encryption Standard(高级加密标准),这是一种广泛使用的对称加密算法,用于保护数据的安全性。AES具有高效性和安全性,适用于大量数据的加密,尤其在Linux和Windows操作...

    .NET的XXTEA加密算法库。.zip

    XXTEA(Extreme eXtended TEA)是一种快速、简单且相对安全的对称加密算法,由David J. Wheeler和Roger M. Needham在1994年提出。它是TEA(Tiny Encryption Algorithm)的增强版本,修复了TEA算法的一些安全漏洞,并...

    xxtea.rar_XXTEA

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

    crypto-js加密解密资源包(含所有前台加密的js代码)

    本资源包“crypto-js加密解密资源包(含所有前台加密的js代码)”正是为了解决这一问题而设计的,它提供了一系列JavaScript实现的加密算法,适用于那些无法访问Google服务,无法轻易获取此类库的开发者。 首先,...

    ARM 加解密功能算法.zip_AES-NI arm_arm aes_oncevfy_widelyks2_wonderfulnm

    这个名为"ARM 加解密功能算法.zip_AES-NI arm_arm aes_oncevfy_widelyks2_wonderfulnm"的压缩包提供了一个针对ARM架构优化的加密库,主要包含对称和非对称加密算法的实现。 1. **AES-NI (Advanced Encryption ...

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

    XXTEA(eXtended eXtended TEA)是一种非对称加密算法,它的设计目标是为了解决TEA(Tiny Encryption Algorithm)算法在特定攻击下的安全性问题。XXTEA采用了四轮的加法轮换操作,通过精心设计的密钥调度和数据操作...

    luac解密用.rar_LUAC 5.3 解密_U3d luac解密_luac解密_shirtqyf_解密

    5. **XXTEA算法**:XXTEA是一种对称密钥加密算法,由David Wheeler和Ross J. Anderson在1994年提出,特点是速度快,安全性相对较高。在"xxtea_experiment.exe"这个文件中,很可能包含了一个使用XXTEA算法进行解密的...

    xxtea-ardupy:用于xxtea加密库的micropython绑定

    XXTEA(Extreme eXtended eXtremely Fast Data Encryption Algorithm)是一种简单的对称加密算法,由David Wheeler和Roger Needham在1998年提出。它主要用于解决微小数据块的加密问题,比如在嵌入式系统或资源有限的...

    delphi中xxTea的实现(源码)

    XXTea是一种对称加密算法,它以其高效和简洁的实现而受到许多开发者的青睐,尤其是在Delphi等编程环境中。本文将深入探讨XXTea在Delphi中的实现,并结合源码进行详细解析。 XXTea算法是基于块密码设计的,它的基本...

    安全登录完整实现方案

    在这个方案中,涉及到了多种JavaScript库和技术,包括键盘模拟(keyboard.js)、大整数操作(BigInt.js)、Base64编码(base64.js)、XXTEA加密算法(xxtea.js)、RSA非对称加密(RSA.js)以及Barrett模除法...

Global site tag (gtag.js) - Google Analytics