我下载了0.6(不是SP1)版本,注意到里面的加密和解密函数是基于密钥对数据的异或的。这样不安全。例如一旦知道明文-密文对,就知道了全部密钥。或者根据概率分析也能找出密钥。这属于经典密码学的范畴。
虽然大多数服务器可能没有mcrypt,而自己用PHP写一个加密函数可能在性能上又有问题(例如使用phpseclib),但是还有一种加密方法:
用MD5函数(更好的是SHA1)处理一系列计数器字符串(例如:zmphfrpk_SECRETKEY_0001,zmphfrpk_SECRETKEY_0002...),这样同样可以产生足够长的用于异或的数据流,而且如果散列函数做得足够好(SHA1足够好了),数据流就是伪随机的。之后得到的随机流和数据流异或得到密文。
——这个方法(CTR模式的变种)类似Salsa20算法的思想,算是比较强壮的加密技术。
——在这个过程中,密钥是SECRETKEY, zmphfrpk是和会话相关的随机参数。在加密和解密过程中,SECRETKEY都是秘密参数,但是zmphfrpk是附加的公开参数(可以附加在密文开头)。
服务器和客户端通信时,SECRETKEY可以使用配置文件中固定的,然后随机参数在会话初始化时交换即可(注意使用SECRETKEY作为密钥的HMAC方法认证这个随机参数,HMAC函数应该是服务器自带的,即使不是,自己写一个也相当简单)。
另外我有意申请开发基于Python的客户端程序。