Closed xiaoyouxi01 closed 6 years ago
xiaoyou你好,感谢你提交更正! 我之前也尝试用OpenSSL替换,但是发现php的OpenSSL加解密库,在极少情况下会与c++的加解密库不匹配。 下面是我们发现的测试案列,用C++库和php的Mcrypt库都能正确解密,但是OpenSSL会解密失败。能麻烦你也用此案测试下么~
<?php /*
* Copyright (C) 2018 All rights reserved.
*
* @File encrypt_0.php
* @Brief
* @Author abelzhu, abelzhu@tencent.com
* @Version 1.0
* @Date 2018-04-19
*
*/
include_once "WXBizMsgCrypt.php";
include_once "sha1.php";
include_once "xmlparse.php";
include_once "pkcs7Encoder.php";
include_once "errorCode.php";
echo "######################### 解包测试";
#
$encrypt = "g8fFI09QX1P0VkTitnAAX4p9aHncZBeQKLfmTkBIc+tAB+JKAIeYzRmAdteQ32T9cXkD1Pfk4YLKG625ypRzVVZPnyL2ENGr8P0tnltwbMGCWK6H2FcQJ3UhtZcWi5y0Yvias+VgcRpLO1DEzT0mmt8fBvrDcGbaOcQ0nAJzLqcCP3fb480L/m6YUh/6T3hXIDGLYoYsvLXAuEFZBcFltIS9uMVlnCp0ebN8Zoc3kV8XSsmqWj9QcDl18UUYrDrl0KeQ02CgvIfZXXaqw9YxJ7/jWHV4769HGJnTP4cjBIdTxdbHidgdgH1jB4GpkguXfrk3Zd6nFvGzKWHZpebFZXD39GK4CG0zqjsKltaklFjB3mpAiuGaTx/kU8hVcum9qEORTjIXPzaiA3cti6jM+fwOWPaS74xp0axwssx9J/NyCtr1ZwqbQv3Duk03J7I2aDF4Yvxp1v8QRH7t1AXhMZReXKcU4X/QJ5QF5bRytY2N48O3syMA9SU0dzDAOUW+OXa2P2+cGzoPzo4xMi6aLJtYMO+PZM23v8OlSg1D9CapQ+LuUzHALQ2hJ2rI/O3shIMF0h7FjLDSXy3h+5Ws39pHZU6UNNSBOn6CRfPnsZT0LlNidgc30xXp/uEMNHkg035tVbz/lA2tOV6JgOBYKMxsgRsBqJ4igwsyZxtO0cQ=";
$key = "k66bejMf9xG6XL7dheRDUBYRRiazprVgLZ0GIq4i0y/";
$appid = "wx0449cb288a23c7c3";
$pc = new Prpcrypt($key);
echo "decode : \n";
$result = $pc->decrypt($encrypt, $appid);
var_dump($result);
我完全是PHP新手啊,代码胡乱写的,请不要见怪。。 看到您能回复,我很开心~ 原来老大也有在考虑这个问题啊~ 我一会儿就去测试下你这个!
额。。我把你这个文件放到callback文件夹中,在浏览器中直接访问,错误值-40005。 我用原先的Mcrypt和OpenSSL做测试,都是错误值-40005啊。。。 是我哪里测试的不对吗?
看起来你的代码是解密成功了~~~~ 不好意思,把 appid改成 wxab249edd27d57738,再试试~ 我这因为没PHP7的环境没法测试,麻烦了~ 其实我才是业余php。。C++工程师。。
appid还是不对。。。 我暂时注释掉了decrypt函数里的corpid判断,解出来是这样的,不知道对不对。
<xml>
<ToUserName><![CDATA[wxab249edd27d57738]]></ToUserName>
<ServiceId><![CDATA[fw9ee0c2ef180ceeec]]></ServiceId>
<AgentType><![CDATA[chat]]></AgentType>
<Msg>
<From>
<Type><![CDATA[single]]></Type>
<Id><![CDATA[T21260001A]]></Id>
<DeviceType><![CDATA[win]]></DeviceType>
</From>
<CreateTime><![CDATA[1521532994]]></CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<MsgId><![CDATA[CAEQwoDD1QUYrYr25oWAgAMgnAI=]]></MsgId>
<Content><![CDATA[a]]></Content>
</Msg>
</xml>
嗯对的,我糊涂了,fw9ee0c2ef180ceeec 才是appid。 那就确认了,没问题~ 应该是我之前用的姿势不对,非常感谢~ 我合并上去~
echo $from_corpid; 看了下corpid是fw9ee0c2ef180ceeec
使用OpenSSL替换Mcrypt,以兼容新版PHP。 使用Wampserver 3.1.3 64bit测试,PHP 5.6.35、7.0.29、7.1.16、7.2.4这4个版本下均正常运行。
根据官方文档:http://php.net/manual/zh/intro.mcrypt.php Mcrypt扩展从 PHP 7.1.0 开始废弃;自 PHP 7.2.0 起,会移到 PECL。