问题记录

PHP升级至7,之前使用了mcrypt_encrypt和mcrypt_decrypt函数,现在出现了如下错误:

Call to undefined function mcrypt_decrypt()

经过多方参考,终于解决了这个数据兼容的问题

问题背景:原来的加密密钥32位,IV是16位

mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $str, MCRYPT_MODE_CBC, $iv);
mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $str, MCRYPT_MODE_CBC, $iv);

变更后为:

openssl_encrypt($str, 'aes-256-cbc', $key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $iv);
openssl_decrypt($str, 'aes-256-cbc', $key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $iv);

参考资料

[1] 用openssl_encrypt替换mcrypt_encrypt的过程
[2] AES五种加密模式(CBC、ECB、CTR、OCF、CFB)
[3] 升级 PHP7.1 后 openssl 解密 mcrypt AES 数据不兼容问题如何处理

CoolQ HTTP API 插件

通过 HTTP 或 WebSocket 对酷 Q 的事件进行上报以及接收请求来调用酷 Q 的 DLL 接口,从而可以使用其它语言编写酷 Q 插件。支持 Windows 7 和 Windows Server 2008 及更新版本,也可以运行在 Wine、Docker。

Docker环境配置

可以使用镜像 richardchien/cqhttp(基于 酷Q 官方的镜像修改)

$ docker pull richardchien/cqhttp:latest
$ mkdir coolq  # 用于存储 酷Q 的程序文件
$ docker run -ti --rm --name cqhttp-test \
             -v $(pwd)/coolq:/home/user/coolq \  # 将宿主目录挂载到容器内用于持久化 酷Q 的程序文件
             -p 9000:9000 \  # noVNC 端口,用于从浏览器控制 酷Q
             -p 5700:5700 \  # HTTP API 插件开放的端口
             -e COOLQ_ACCOUNT=123456 \ # 要登录的 QQ 账号,可选但建议填
             -e CQHTTP_POST_URL=http://example.com:8080 \  # 事件上报地址
             -e CQHTTP_SERVE_DATA_FILES=yes \  # 允许通过 HTTP 接口访问 酷Q 数据文件
             richardchien/cqhttp:latest

事件上报

API

CoolQ HTTP API 插件

启动容器时在docker run命令后加上如下命令

--add-host ${host.name}:${host.ip}

例如:

docker run --add-host test.com:127.0.0.1 -d --name test -p 8800:8000 test/test:latest