浏览模式: 标准 | 列表

XXTEA 算法很安全,而且非常快速,非常适合应用于 Web 开发中。但目前似乎很少有人将该算法用于实际开发中。甚至国内尚无介绍该算法的文章(至少在 Google 上搜索不到这方面的中文文章,关于密码学算法的书中也未见提及)。我在 Google 上搜索到了几个国外的 XXTEA 算法的实现(见参考文献),但基本上都是 JavaScript 的,但这些 JavaScript 实现也有一些问题,如果加密字符串长度不是 4 的整数倍,则这些实现的在加密后无法真正还原,还原以后的字符串实际上与原字符串不相等,而是后面多了一些 \0 的字符,或者少了一些 \0 的字符。

原因在于 XXTEA 算法只定义了如何对 32 位的信息块数组(实际上是 32 位无符号整数数组)进行加密,而并没有定义如何来将字符串编码为这种数组。而现有的实现中在将字符串编码为整数数组时,都丢失了字符串长度信息,因此还原出现了问题。另外单纯的 JavaScript 是没有意义的,因为单纯的客户端加密解密是不能有效保证信息的安全性的。因此我写了这个 JavaScript 和 PHP 实现,这两种实现在字符串编码上采用的算法是一致的,因此 JavaScript 加密的内容可以用 PHP 实现的解密算法进行解密,反之亦然。

2006年12月9日 更新

当解密失败时(如未使用正确的密钥),可以返回 null(JavaScript) 或 flase(PHP)。

2006年7月23日 更新

修正了当密钥不足 16 个字节时无法加密/解密的问题。

2006年6月27日 更新

修正了大多数 Linux 系统上 PHP 浮点数到整数转化不正常引起的加密解密不正确的问题。(十分感谢 lynk 和 lishouming 二位的帮助和测试!)

2006年3月7日 更新

修正了在 64 位机上不能正常工作的问题。(十分感谢 legend 大侠鼎力相助测试!)

JavaScript 版本的演示程序:http://test.coolcode.cn/xxtea/

» 阅读全文

8月
21

XXTEA 的 PECL 扩展

前面在 XXTEA 加密算法的 JavaScript 和 PHP 实现 一文里,我已经给出了 XXTEA 算法的纯 PHP 实现,但是因为 PHP 本身的原因,该纯 PHP 版本的速度相对来说还比较慢,不适合处理大量的数据。为了提高速度,我用 C 编写了这个 XXTEA 的 PECL 扩展,该扩展已在 Windows IIS + PHP 5.1.4 和 Ubuntu 6.06 + PHP 5.1.2 下编译调试通过,在其它版本的 PHP 上也可以编译。速度非常快。

下载:xxtea-1.0.3.zip

» 阅读全文

XXTEA 加密算法前面介绍过了,这次给出的是 Java 版本的实现。用法同 C# 版本的类似(只是大小写不太一样),也是对字节数组进行加密解密的,也全都是静态方法,无须创建对象,加密的内容用其它语言实现的算法也可以解密,反之亦然。

» 阅读全文

前面我在 XXTEA 加密算法的 JavaScript 和 PHP 实现 一文中介绍了 XXTEA 加密算法,并给出了 JavaScript 和 PHP 两种实现,并且将其应用到了 PHPRPC 中。最近打算写 PHPRPC 的 .NET 实现,因此写了这个 C# 实现的 XXTEA 加密算法。因为感觉 .NET 的加密体系太过复杂,而且 .NET 加密体系中的加密算法都是需要一个 Key 和一个 IV,但是其他语言中加密算法(比如 Java 或 PHP)都是只需要一个 Key,为了让 .NET 加密的内容用其他语言中的实现也能够解密,因此我写的XXTEA 加密算法实现没有继承自 .NET 加密算法类,并且用法非常简单,全都是静态方法,无须创建对象,加密的内容用其它语言实现的算法也可以解密,反之亦然。

» 阅读全文

该函数来自 http://valyala.narod.ru/huinya/pow_mod.html,利用它计算 128 位二进制数的 powmod 只需要 200 毫秒左右,而其他几个 BigInt.js 中的 powmod 函数计算这种长度的数字都需要 400-800 毫秒。因此用该函数来实现密钥交换算法的话,会得到较高的处理速度。最后 3 个函数是我补充的,str2num 用于将 packString 转化为 BigInt,num2str 用于将 BigInt 转化为 packString,rand 用于生成 n 位的随机数,如果 s = 1,则将第 n 位置一,以保证该随机数正好 n 位。

» 阅读全文