下载位置
http://download.csdn.net/detail/erlanp/4216936
    测试php版本5.2.10,在别的版本可能会有些问题(建议使用chrome浏览器--能自动换行)。    utf8文件夹中的文件是用的utf8编码,gb2312用的是gb码。如果聊天内容gb2312字符集够用,建议用gb2312--内容更少,更安全。    文件crypt_1.php中'_1'表示用的是AES-128-cbc模式(如果想改,找到文件mcrypt_ecb.php,找到ecb_en和ecb_de函数,对$alg参数的默认值对应更改,建议使用密码分组链接模式,-cbc结尾;我开始用的是ecb电子密本模式,发现不很安全),'_2'表示的是用了AES-128加密外,还用了两字母代替一字母的加密,用十六进制来说就是用'00~ff'来表示'0~f'。因为有二位十六进制来表示一位,加密时就可以从加密字典(密码循环hash产生)中随机抽取二位来表示(这是一种古老的防频度分析的密码),这样就算文本和密码一样,但每回的密文会不一样。但是长度会大一倍,速度相比分组密码加密是比较慢的,特别是文件较大时。    有't_'开头的使用了时间戳(须保证通信双方的系统时间不差太多),实现了每小时换一次密码。    有'f_'开头的可以加解密二进制文件(在utf文件夹)。因为DES或AES要补全位数的原因,解密后的文件和原文件不一样,文件最后会多一些'0000'什么的,但不影响内容(比如文件是压缩文件,可以比较原文件和加密再解密后的文件,两个压缩文件里面的文件,hash值是一样的)。由于htm表单的文件域的['tmp_name']的缓存限制(如\WINDOWS\Temp\php31.tmp),只读取约1.5M以下的文件。另外,要加密的文件要经过缓存,要确保缓存文件和未加密文件被删除且被覆盖(加密硬盘也许更好,看代价如何)。如果想加密0.75M以上的文件,直接读文件就行(当然php设置不同,会有别的限制)。    另外还有密码本功能(仅仅使用简单的异或运算),但不会自动对密码本“更新”(剪掉),因为通信双方误操作可能会让密码本不“同步”。不过't_'开头的文件实现了用时间戳同步密码本(在文件中找到$t_cut = 3600;可更改同步时间间隔)。须保障双方密码本文件hash值一致;密码本会循环使用,用较大的文件可减少或避免循环使用--如果通迅内容不多,我想十几M大足够。密码本项可以不填写。    这只是一个练手作品,我也不是这方面的专家,可扩展性也做得不行。如果想加密文件,建议使用专业软件。谢谢使用!如有BUG,请多原谅。