PHP 7.1中操作OpenSSL取代Mcrypt加解密的要领详解
提纲:php7.1宣布后新特征吸引了不少PHPer,各人都在接头新特征带来的甜头与便利。可是从php7.0 进级到 php7.1 废弃(过期)了一个在已往广泛应用的扩展(mcrypt扩展)。官方提供了响应的办理提醒,却没有提供更具体的办理步伐。于是坑来了: 本日在行使微信开放平台对接一个内容打点体系的时辰,在绑定公家号的时辰一向失败 缘故起因:调试的时辰发明,直接缘故起因是由于开放平台内里填写的授权变乱(该授权变乱每异常钟会通送一次变乱来更新ticket),即: 这个处所填写的url,调试发明,这个URL没错,微信也有每10分钟推送过来,可是到最后一向吸取不到ticket,看代码发明是由于解密微信过来的数据的时辰报错了: function aes_decode($message,$encodingaeskey = '',$appid = '') {$key = base64_decode($encodingaeskey . '='); $ciphertext_dec = base64_decode($message); $module = mcrypt_module_open(MCRYPT_RIJNDAEL_128,'',MCRYPT_MODE_CBC,''); $pad = ord(substr($decrypted,-1)); 即这个处所,因为我的情形是PHP 7.1,查找资料发明PHP 7.1已经废弃了Mcrypt,以是这个代码内里的mcrypt_*都是无法运行的。 办理:查找资料发明,可以通过OpenSSL来取代Mcrypt(条件是已经安装了OpenSSL扩展,不外一样平常都是默认安装的) openssl是一个成果强盛的器材包,它集成了浩瀚暗码算法及适用器材。我们即可以操作它提供的呼吁台器材天生密钥、证书来加密解密文件,也可以在操作其提供的API接口在代码中对传输信息举办加密。 以是上面的代码可以改为:function aes_decode($message,16);/ mcrypt对称解密代码在PHP7.1已经被丢弃了,以是行使下面的openssl来取代 $pad = ord(substr($decrypted,-1)); 增补:上面的解密已经修改了,那么对应的Mcrypt加密也必要修改,假如不改的话会导致不能全网宣布以及不能推送动静等变乱 加密的源代码如下: $block_size = 32; $text_length = strlen($text); $amount_to_pad = $block_size - ($text_length % $block_size); if ($amount_to_pad == 0) { $amount_to_pad = $block_size; } $pad_chr = chr($amount_to_pad); $tmp = ''; for ($index = 0; $index < $amount_to_pad; $index++) { $tmp .= $pad_chr; } $text = $text . $tmp; $size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_CBC); $module = mcrypt_module_open(MCRYPT_RIJNDAEL_128,$iv); $encrypted = mcrypt_generic($module,$text); mcrypt_generic_deinit($module); mcrypt_module_close($module); $encrypt_msg = base64_encode($encrypted); 修改后的代码为:$block_size = 32;$text_length = strlen($text); $amount_to_pad = $block_size - ($text_length % $block_size); if ($amount_to_pad == 0) { $amount_to_pad = $block_size; } $pad_chr = chr($amount_to_pad); $tmp = ''; for ($index = 0; $index < $amount_to_pad; $index++) { $tmp .= $pad_chr; } $text = $text . $tmp; / mcrypt对称加密代码在PHP7.1已经被丢弃了,以是行使下面的openssl来取代 $size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128,$text); mcrypt_generic_deinit($module); mcrypt_module_close($module); / $encrypted = openssl_encrypt($text,$iv); 出格留意:往往涉及到微信开拓的流程,假如已经进级到PHP 7.1的话,那么很有须要必要搜查一下是否是行使Mcrypt对称加解密的,微信开拓文档中行使的demo也是行使Mcrypt加解密的,这一点必要留意。 总结以上就是这篇文章的所有内容了,但愿本文的内容对各人的进修可能事变具有必然的参考进修代价,假若有疑问各人可以留言交换,感谢各人对编程之家的支持。 (编辑:湖南网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |