为啥YII2 会出现 mcrypt_generic_init(): Key size is 0 [ 求助交流 ]
因为要做微信开放平台的开发,微信开放平台提供了一个PHP 的加解密demo,我使用时在不使用YII2 的情况下,是不报错的,但放到YII2 上程序运行如下,
PHP Warning – yii\base\ErrorException
mcrypt_generic_init(): Key size is 0
in D:\phpStudy\WWW\basic\web\msgcrypt\pkcs7Encoder.php at line 87 78798081828384858687888990919293949596 $random = $this->getRandomStr();
$text = $random . pack("N", strlen($text)) . $text . $appid; // 网络字节序 $size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC); $module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, ''); $iv = substr($this->key, 0, 16); //使用自定义的填充方式对明文进行补位填充 $pkc_encoder = new PKCS7Encoder; $text = $pkc_encoder->encode($text); mcrypt_generic_init($module, $this->key, $iv); //加密 $encrypted = mcrypt_generic($module, $text); mcrypt_generic_deinit($module); mcrypt_module_close($module); //print(base64_encode($encrypted)); //使用BASE64对加密后的字符串进行编码 return array(ErrorCode::$OK, base64_encode($encrypted)); } catch (Exception $e)
求各位大侠指点,有没人遇到过
共 2 条回复
-
解决方案如下:
(关键)
示例代码中,加密解密类的实例创见通过 Class 同名方法 的方式创建。
public function
WXBizMsgCrypt
($token, $encodingAesKey, $appId)
{
$this->token = $token;
$this->encodingAesKey = $encodingAesKey;
$this->appId = $appId;
}在YII或者laravel中,对Class类的实例构建需要通过构造函数 __construct()创建。
public function
__construct
($token, $encodingAesKey, $appId)
{
$this->token = $token;
$this->encodingAesKey = $encodingAesKey;
$this->appId = $appId;
}不止一处,其他用到的子类也有这个现象,挨个改改吧。
(建议) 示例代码中,使用的是include_once加载,更新成namespace ... use 的方式会更合理;
(补充) 示例代码中,pkcs7Encoder这个文件中包含了两个Class,如果真正使用,建议拆分成俩文件……Z_T_Z , qq260101081 觉得很赞 -
qq260101081 回复于 2016-11-24 20:02 举报
我也遇到了这个问题,按这方法果然解决了,3Q分享
qustdjx
最后登录:2015-11-08
在线时长:1小时21分
- 粉丝0
- 金钱10
- 威望0
- 积分20