January 1st, 2010 by 张磊
上周霍炬做了一个php和js两端做rsa加解密的demo,昨天我和杜欢讨论了一下,他建议其实不一定要用RSA,即使用对称加密也把key暴露出来,只要运算量够大,就可以达到目的。
顺着这思路,我实现了一个更简单的加解密,把所有要输出的内容,在服务器端按位异或,然后在js中再异或回来。这么做运算量还太小,但由于PHP中ob_start() 函数是stackable的,上述的加解密过程可以嵌套多层:解开一层js,发现其中还是一层js。估计尝试解密并过滤的兄弟,一定会很崩溃的。
我顺便做了一个dabr修改版,即可支持自定义层次的加密,解密的过程会在浏览器自动进行。演示地址:http://1fuck63.com/ 。尝试查看一下网页源代码,只有一行,任何可读的字符都没有留下。
我测试时,使用两层的加密,在firefox解密的时间就超过了100ms,在IE6中超过了300ms。使用三层时,已经慢得不得了了(因为每次加密都会导致内容的长度暴涨)。
此修改版的下载地址在:http://1fuck63.com/dabr.tar.gz ,如果大家不放心,可仅替换index.php, common/theme.php这两个文件, 并在根目录下增加jsencode.php。在jsencode.php中,第二行 define(‘ENCODE_DEPTH’, x); 定义了使用几层加密。设为2已经足够了。解密时引用了霍炬脚本中的一个函数,望莫怪。
祝大家元旦快乐。
UPDATE: 看到有朋友留言,说不带这么折腾dabr的,因为大家多数是用手机上的。其实这种加密方式可以用在任何系统里面,只要引入了压缩包中的jsencode.php文件,很容易就可以改造出一个加密版的wordpress。
HicroKee
December 21st, 2007 by 张磊
有好长时间不用javascript,这几天用起来还有点不纯熟。不想看到再有人说javascript是rubbish,关键还是人怎么使用它。复习一下有关的知识:
javascript中的数组
arr = new Array();
arr = new Array(num);
arr = new Array(["item1","item2"...]);
数组的创建基本就这几种,我用的最多的是第一种。表面看起来,创建数组的时候提供一个整型参数可以创建一个定长数组,其实还是可以使用超出范围的index来设置数组元素的。比如用arr = new Array(3)创建一个数组,仍然可以用arr[100]=”item100″进行赋值。所以,还不如干脆用第一种呢。
javascript中的类
function Shop (name) {
this.name = name;
this.somefunc = function (){
}
}
在JS中,声明一个类不是用class XXX,而是用上面的方法。Javascript中的类有些高级的用法,如果感兴趣可以看一下script.aculo.us/prototype这些库的程序,还是比较容易懂的。我自己掌握的就是上面这个简单的办法。使用的时候,通过shop = new Shop(name) 就可以创建一个Shop的类。
当然,类也可以包含方法,具体的用法,实践一下就好。
JSON
最初接触AJAX的时候,在我的启蒙书籍“AJAX基础教程”中看到过JSON。当时我用AJAX根本用不到XML(只用TEXT),所以也没打算去折腾这个看起来比XML复杂的JSON。
JSON是这样一个东西,可以把任何Javascript的对象、数组等数据编码为一个字串,而比同样内容编码为XML要省了不少空间。如果想向服务器发送一个或多个对象的信息,用JSON无疑是很方便的。关于JSON的具体介绍可以看这里。
想用JSON,需要先下载一个JSON的文件,地址是http://json.org/json.js。下载之后包含在页面内,对任何想编码为JSON的数据,只要调用一下toJSONString()就可以了。
比如一个数组定义为 arr = new Array(["item1","item2"]); ,使用arr.toJSONString()将返回[["item1"],["item2"]]。
上面说了编码JSON。想把原来的对象还原回来,只要用eval()函数。当然eval的效率值得商榷,不过还没进行过具体的测试。
此外,友情提醒一下,那个JSON.js文件里面注释占了一大部分。如果要用在实际的项目中,最好都干掉吧,不然很影响加载的速度。
November 8th, 2006 by 张磊
很幼稚……
最近在linux下的虚拟机装了一个WindowsMe用于操作网上银行以及打电话,但是每次用Qemu启动都会很费时间敲命令,于是就想做成一个可执行文件。
vim winme.sh
在里面写入这两行:
#!/bin/bash
qemu -hda /media/hda5/winxp/winxp.img -m 192 -soundhw es1370 -localtime
我原来没有写第一行,一直不能成功。这样写好以后用Vim保存,退出。就看到目录下生成一个可执行文件。这时右键选择属性->权限,最下方会有一个“允许以程序执行文件”,将这一项勾选,就可以了。
这时双击运行,就会问显示还是运行,说明已经创建成功了。第一次,不容易阿……