浏览模式: 标准 | 列表

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/

» 阅读全文

以前写 PHPRPC 实现时,JavaScript 版本的序列化实现是修改自 http://www.devpro.it/code/102.html 的,这个实现虽然目前仍然在更新,不过它并没有完全实现 PHP 序列化的所有标记,因此它无法序列化复杂对象,例如嵌套对象,也无法反序列化所有的 PHP 序列化以后的内容。因此我重新编写了一个实现,这个实现与 PHP 5 的序列化完全兼容,并且可以反序列化 PHP 4、PHP 5 和 PHP 6 序列化的内容。支持魔术方法 __sleep 和 __wakeup,支持实现了 Serializable 接口的序列化和反序列化(在 JavaScript 没有接口的概念,因此只要对象中包含 serialize 和 unserialize 方法就可以了,关于 Serializable 接口与自定义序列化的更多内容请参见:PHP 序列化(serialize)格式详解——自定义对象序列化)。该实现兼容以下版本的浏览器(已测试):

  • IE 4+(包括 Windows Vista 的 IE 7+ 与 Windows Mobile 2003/Windows Moblie 5 的 IE 4)
  • Netscape 6+
  • Mozilla/Firefox
  • Opera(包括 Opera Mini 和 Opera Mobile,但对于 Opera Mobile 8.5 beta 2 for Windows Mobile 5 Pocket PC 对象序列化时,对象名的序列化支持的不完整,而其他版本都正常。)
  • Konqueror
  • Safari
  • Epiphany

其他浏览器未测试,但应该基本上只要支持 JavaScript 的浏览器都可以支持(有条件的用户希望能够帮忙测试)。

» 阅读全文

IE 5.5 中的 JScript 版本是 5.5 版,它比以前版本的 JScript 中多了如数组的 push、pop、shift、unshift 方法和 encodeURI、decodeURI 等一些重要的函数。而这些增加的内容在目前其他浏览器(如 Moziila/Firefox 和 Opera)上也同样支持。因此目前开发网站一般对于 IE 浏览器只能兼容到 5.5 版,而对于更低版本的 IE(如 IE 5、IE 4 等),则不再去考虑了。虽然这些低版本的 IE 浏览器目前已经不是主流,但如果能够不需要修改现有代码就能够兼容它们的话,倒是也可以考虑。因此我做了这个兼容低版本 IE 的 JScript 5.5 实现。当然它不可能完全兼容 JScript 5.5,但对于最常用的一些方法,都已经实现了。

该库使用非常简单,只需要在网页的 head 部分加入:

<script type="text/javascript" src="iecompat.js"></script>

就可以了。

2006年6月18日 更新

增加 encodeURI、encodeURIComponent、decodeURI、decodeURIComponent 对 4 字节 UTF8 编码的支持。

2006年2月17日 更新

对 encodeURI、encodeURIComponent、decodeURI、decodeURIComponent 进行了优化,大大的提高其处理速度。

» 阅读全文

在做 ajax 编程时,我们常常需要将 xmlhttp 获取到的页面内容通过 innerHTML 来赋给某个容器(比如 div、span 或者 td 等),但是这里存在一个问题,就是我们将要赋给 innerHTML 的页面内容如果包含有脚本程序,这些脚本程序不管是外部脚本,还是内部脚本,可能(1)都不会被执行。这个问题在某些时候微不足道,甚至可以忽略,但有些时候,这个问题就非常严重,它很可能让我们的程序得不到预期的结果。在本文中我们就来解决这个问题。

2006-6-4 更新:

修正了插入到 innerHTML 中的脚本无法获取插入到 innerHTML 中对象的问题。(感谢网友 DE 的提醒)。
增加了对同一容器中内容设置的共享锁,使得连续设置同一个容器内的时,不会再发生冲突。(感谢新加坡网友 Jason Li 的提醒)。

演示程序地址:Demo

» 阅读全文

今天装了个 Delphi 7 的精简版,然后用它把前些日子写的那个 JsMinGUI .NET 版本重写了一遍,功能跟 .NET 版本一样,不过现在不需要 .NET 运行库就可以运行了。

功能介绍:

  1. 它可以向命令行版本一样,采用图形界面操作来完成压缩一个 JavaScript 脚本文件。
  2. 输入文件可以和输出文件相同。
  3. 可以选择输入多个 JavaScript 脚本文件,合并压缩为一个 JavaScript 脚本文件。
  4. 当输入多个 JavaScript 脚本文件时,可以指定它们合并的前后顺序。
  5. 输入文件可以直接拖放到列表中,而不必非要用打开对话框添加。
  6. 可自动判断输入文件是否重复添加。
  7. 比原版的 JsMin 增加了对注释中 IE 条件编译语句压缩的支持。

下载:

  1. 可执行文件:JsMinGUI.exe.zip
  2. 源代码:JsMinGUI.src.zip

» 阅读全文