pbootcms网站模板|日韩1区2区|织梦模板||网站源码|日韩1区2区|jquery建站特效-html5模板网

PHP 7.1中利用OpenSSL代替Mcrypt加解密的方法詳解

最近在開發微信公眾號功能的時候發現在PHP 7.1中Mcrypt已經被棄用了,無奈只能找對應的解決方法來替代,所以這篇文章主要給大家介紹了關于在PHP 7.1中利用OpenSSL代替Mcrypt加解密的相關

概要:

php7.1發布后新特性吸引了不少PHPer,大家都在討論新特性帶來的好處與便利。但是從php7.0 升級到 php7.1 廢棄(過時)了一個在過去普遍應用的擴展(mcrypt擴展)。官方提供了相應的解決提示,卻沒有提供更詳細的解決辦法。于是坑來了:

今天在使用微信開放平臺對接一個內容管理系統的時候,在綁定公眾號的時候一直失敗

原因:

調試的時候發現,直接原因是因為開放平臺里面填寫的授權事件(該授權事件每十分鐘會通送一次事件來更新ticket),即:

PHP 7.1中利用OpenSSL代替Mcrypt加解密的方法詳解

這個地方填寫的url,調試發現,這個URL沒錯,微信也有每10分鐘推送過來,但是到最后一直接收不到ticket,看代碼發現是因為解密微信過來的數據的時候報錯了:

<?php 
 
function aes_decode($message, $encodingaeskey = '', $appid = '') { 
 $key = base64_decode($encodingaeskey . '='); 
 
 $ciphertext_dec = base64_decode($message); 
 $iv = substr($key, 0, 16); 
 
 $module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, ''); 
 mcrypt_generic_init($module, $key, $iv); 
 $decrypted = mdecrypt_generic($module, $ciphertext_dec); 
 mcrypt_generic_deinit($module); 
 mcrypt_module_close($module); 
 
 $pad = ord(substr($decrypted, -1)); 
 if ($pad < 1 || $pad > 32) { 
 $pad = 0; 
 } 

即這個地方,由于我的環境是PHP 7.1,查找資料發現PHP 7.1已經廢棄了Mcrypt,所以這個代碼里面的mcrypt_*都是無法運行的。

解決:

查找資料發現,可以通過OpenSSL來代替Mcrypt(前提是已經安裝了OpenSSL擴展,不過一般都是默認安裝的)

openssl是一個功能強大的工具包,它集成了眾多密碼算法及實用工具。我們即可以利用它提供的命令臺工具生成密鑰、證書來加密解密文件,也可以在利用其提供的API接口在代碼中對傳輸信息進行加密。

所以上面的代碼可以改為:

<?php 
 
function aes_decode($message, $encodingaeskey = '', $appid = '') { 
 $key = base64_decode($encodingaeskey . '='); 
 
 $ciphertext_dec = base64_decode($message); 
 $iv = substr($key, 0, 16); 
 
 /* mcrypt對稱解密代碼在PHP7.1已經被拋棄了,所以使用下面的openssl來代替 
 $module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, ''); 
 mcrypt_generic_init($module, $key, $iv); 
 $decrypted = mdecrypt_generic($module, $ciphertext_dec); 
 mcrypt_generic_deinit($module); 
 mcrypt_module_close($module); 
 */ 
 $decrypted = openssl_decrypt($ciphertext_dec, 'AES-256-CBC', $key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $iv); 
 
 $pad = ord(substr($decrypted, -1)); 
 if ($pad < 1 || $pad > 32) { 
 $pad = 0; 
 } 

補充:

上面的解密已經修改了,那么對應的Mcrypt加密也需要修改,如果不改的話會導致不能全網發布以及不能推送消息等事件
加密的源代碼如下:

<?php 
function aes_encode($message, $encodingaeskey = '', $appid = '') { 
 $key = base64_decode($encodingaeskey . '='); 
 $text = random(16) . pack("N", strlen($message)) . $message . $appid; 
 $iv = substr($key, 0, 16); 
 
 $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, '', MCRYPT_MODE_CBC, ''); 
 mcrypt_generic_init($module, $key, $iv); 
 $encrypted = mcrypt_generic($module, $text); 
 mcrypt_generic_deinit($module); 
 mcrypt_module_close($module); 
 
 $encrypt_msg = base64_encode($encrypted); 
 return $encrypt_msg; 
} 

修改后的代碼為:

<?php 
function aes_encode($message, $encodingaeskey = '', $appid = '') { 
 $key = base64_decode($encodingaeskey . '='); 
 $text = random(16) . pack("N", strlen($message)) . $message . $appid; 
 $iv = substr($key, 0, 16); 
 
 $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, MCRYPT_MODE_CBC); 
 $module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, ''); 
 mcrypt_generic_init($module, $key, $iv); 
 $encrypted = mcrypt_generic($module, $text); 
 mcrypt_generic_deinit($module); 
 mcrypt_module_close($module); 
 */ 
 
 $encrypted = openssl_encrypt($text, 'AES-256-CBC', $key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $iv); 
 $encrypt_msg = base64_encode($encrypted); 
 return $encrypt_msg; 
} 
【網站聲明】本站除付費源碼經過測試外,其他素材未做測試,不保證完整性,網站上部分源碼僅限學習交流,請勿用于商業用途。如損害你的權益請聯系客服QQ:2655101040 給予處理,謝謝支持。

相關文檔推薦

這篇文章主要介紹了PHP定義字符串的四種方式,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
下面小編就為大家分享一篇php 替換文章中的圖片路徑,下載圖片到本地服務器的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
下面小編就為大家分享一篇PHP給源代碼加密的幾種方法匯總(推薦),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
下面小編就為大家分享一篇php打開本地exe程序,js打開本地exe應用程序,并傳遞相關參數方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
這篇文章主要介紹了PHP類的反射來實現依賴注入過程以及相關知識點分享,對此有興趣的朋友跟著小編學習下吧。
php遍歷一個文件夾內的所有文件和文件夾,并刪除所有文件夾和子文件夾下的所有文件的代碼,通過遞歸方式實現達到清空一個目錄的效果。本文給大家分享實例代碼,需要的朋友參考
主站蜘蛛池模板: 纯水设备_苏州皙全超纯水设备水处理设备生产厂家 | 不锈钢搅拌罐_高速搅拌罐厂家-无锡市凡格德化工装备科技有限公司 | 钢制拖链生产厂家-全封闭钢制拖链-能源钢铝拖链-工程塑料拖链-河北汉洋机械制造有限公司 | 净化板-洁净板-净化板价格-净化板生产厂家-山东鸿星新材料科技股份有限公司 | 潍坊青州古城旅游景点攻略_青州酒店美食推荐-青州旅游网 | 运动木地板厂家,篮球场木地板品牌,体育场馆木地板安装 - 欧氏运动地板 | 耐高温风管_耐高温软管_食品级软管_吸尘管_钢丝软管_卫生级软管_塑料波纹管-东莞市鑫翔宇软管有限公司 | 粒米特测控技术(上海)有限公司-测功机_减速机测试台_电机测试台 | 企业彩铃制作_移动、联通、电信集团彩铃上传开通_彩铃定制_商务彩铃管理平台-集团彩铃网 | 薪动-人力资源公司-灵活用工薪资代发-费用结算-残保金优化-北京秒付科技有限公司 | 云南外加剂,云南速凝剂,云南外加剂代加工-普洱澜湄新材料科技有限公司 | 电动葫芦|环链电动葫芦-北京凌鹰名优起重葫芦 | 艾乐贝拉细胞研究中心 | 国家组织工程种子细胞库华南分库 | SRRC认证_电磁兼容_EMC测试整改_FCC认证_SDOC认证-深圳市环测威检测技术有限公司 | 冷凝水循环试验箱-冷凝水试验箱-可编程高低温试验箱厂家-上海巨为(www.juweigroup.com) | 耳模扫描仪-定制耳机设计软件-DLP打印机-asiga打印机-fitshape「飞特西普」 | 日本细胞免疫疗法_肿瘤免疫治疗_NK细胞疗法 - 免疫密码 | 三效蒸发器_多效蒸发器价格_四效三效蒸发器厂家-青岛康景辉 | 合同书格式和范文_合同书样本模板_电子版合同,找范文吧 | 天津暖气片厂家_钢制散热器_天津铜铝复合暖气片_维尼罗散热器 | 自动螺旋上料机厂家价格-斗式提升机定制-螺杆绞龙输送机-杰凯上料机 | 棕刚玉_白刚玉_铝酸钙-锐石新材料 | 原子吸收设备-国产分光光度计-光谱分光光度计-上海光谱仪器有限公司 | 双工位钻铣攻牙机-转换工作台钻攻中心-钻铣攻牙机一体机-浙江利硕自动化设备有限公司 | 隧道窑炉,隧道窑炉厂家-山东艾瑶国际贸易 | 合肥宠物店装修_合肥宠物美容院装修_合肥宠物医院设计装修公司-安徽盛世和居装饰 | Copeland/谷轮压缩机,谷轮半封闭压缩机,谷轮涡旋压缩机,型号规格,技术参数,尺寸图片,价格经销商 CTP磁天平|小电容测量仪|阴阳极极化_双液系沸点测定仪|dsj电渗实验装置-南京桑力电子设备厂 | 悬浮拼装地板_幼儿园_篮球场_悬浮拼接地板-山东悬浮拼装地板厂家 | 北京模型公司-工业模型-地产模型-施工模型-北京渝峰时代沙盘模型制作公司 | 储气罐,真空罐,缓冲罐,隔膜气压罐厂家批发价格,空压机储气罐规格型号-上海申容压力容器集团有限公司 | 档案密集架,移动密集架,手摇式密集架,吉林档案密集架-厂家直销★价格公道★质量保证 | 儋州在线-儋州招聘找工作、找房子、找对象,儋州综合生活信息门户! | 全自动过滤器_反冲洗过滤器_自清洗过滤器_量子除垢环_量子环除垢_量子除垢 - 安士睿(北京)过滤设备有限公司 | 液压中心架,数控中心架,自定心中心架-烟台恒阳机电设计有限公司 行星搅拌机,双行星搅拌机,动力混合机,无锡米克斯行星搅拌机生产厂家 | 清管器,管道清管器,聚氨酯发泡球,清管球 - 承德嘉拓设备 | 深圳货架厂家_金丽声精品货架_广东金丽声展示设备有限公司官网 | 压缩空气检测_气体_水质找上海京工-服务专业、价格合理 | 胜为光纤光缆_光纤跳线_单模尾纤_光纤收发器_ODF光纤配线架厂家直销_北京睿创胜为科技有限公司 - 北京睿创胜为科技有限公司 | 中高频感应加热设备|高频淬火设备|超音频感应加热电源|不锈钢管光亮退火机|真空管烤消设备 - 郑州蓝硕工业炉设备有限公司 | 成都软件开发_OA|ERP|CRM|管理系统定制开发_成都码邻蜀科技 | 防火板_饰面耐火板价格、厂家_品牌认准格林雅 |