Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >PHP7以上 不支持mcrypt_module_open方法问题(微信视频号接口对接)

PHP7以上 不支持mcrypt_module_open方法问题(微信视频号接口对接)

作者头像
用户7657330
发布于 2023-10-19 06:12:22
发布于 2023-10-19 06:12:22
41803
代码可运行
举报
文章被收录于专栏:程序生涯程序生涯
运行总次数:3
代码可运行

最近在对接视频号,沿用官方sdk文档,关于回调方法中的参数解码遇到的问题。

Fatal error: Uncaught Error: Call to undefined function mcrypt_module_open()

对明文加密:

原代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//获得16位随机字符串,填充到明文之前
$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);

修改后的代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$random = $this->getRandomStr();
$text = $random . pack("N", strlen($text)) . $text . $appid;
$iv = substr($this->key, 0, 16);
$pkc_encoder = new PKCS7Encoder;
$text = $pkc_encoder->encode($text);
$encrypted = openssl_encrypt($text, 'AES-256-CBC', $this->key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $iv);

对密文解密:

原代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//使用BASE64对需要解密的字符串进行解码
$ciphertext_dec = base64_decode($encrypted);
$module = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
$iv = substr($this->key, 0, 16);
mcrypt_generic_init($module, $this->key, $iv);
 
//解密
$decrypted = mdecrypt_generic($module, $ciphertext_dec);
mcrypt_generic_deinit($module);
mcrypt_module_close($module);

修改后:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$ciphertext_dec = base64_decode($encrypted);
$iv = substr($this->key, 0, 16);
$decrypted = openssl_decrypt($ciphertext_dec, 'AES-256-CBC', $this->key, OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING, $iv);
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-10-12,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
PHP的Mcrypt加密扩展知识了解
今天我们来学习的是 PHP 中的一个过时的扩展 Mcrypt 。在 PHP7 之前,这个扩展是随 PHP 安装包一起内置发布的,但是现在新版本的 PHP 中已经没有了,需要使用这个扩展的话我们需要单独安装,并且在使用的时候也是会报出过时的警告的。所以,我们学习使用这些函数的时候,就需要使用 @ 来抑制错误信息。当然,之所以会对这套扩展发出过时警告,是因为 PHP 更加推荐使用 OpenSSL 来处理类似的加密能力。
硬核项目经理
2020/11/02
9150
php DES加密算法实例分析
public static function encrypt($data,$key){
用户8832582
2021/07/13
9490
微信消息加解密Mcrypt在php7.2中废弃与open_ssl替代解决方案
之前在接入微信公众号相关的接口,对微信消息加解密操作时,下载了官网上的php demo下来。
benny
2019/05/24
2K0
在 PHP 7.1 中使用 openssl 取代 mcrypt
从 PHP 7.0 升级到 PHP 7.1 废弃了一个在过去普遍应用的扩展(mcrypt),但是微信官方提供的消息加密解密算法中的核心部分中确实使用 mcrypt 的,Prpcrypt class 的加密方法(encrypt)和解密方法(decrypt),怎么改成 openssl 的函数呢?
Denis
2023/04/15
7390
php之Aes加密案例讲解
在项目中,尤其是pc端的时候,我们在用户登录后会给前端返回一个标识,来判断用户是否登录,这个标识大多数都是用户的id
用户7353560
2021/11/07
4760
PHP中Mcrypt加密字符串
PHP中Mcrypt php $key = "__Joyous__";// key $iv = "23joyous";// IV $input = "id=123";// 加密的字符串 $bit_check=8;//检验位 $str= encrypt($input,$key,$iv,$bit_check); echo "原字符串: $input 执行加密: $str 执行解密: "; echo decrypt($str,$key,$iv,$bit_check); function encrypt(
苦咖啡
2018/05/07
1.4K0
PHP实现的AES双向加密解密功能示例【128位】
本文实例讲述了PHP实现的AES双向加密解密功能。分享给大家供大家参考,具体如下:
用户2323866
2021/07/13
1.5K0
php des 加密解密实例
des加密是对称加密中在互联网应用的比较多的一种加密方式,php 通过mcrypt扩展库来支持des加密,要在Php中使用des加密,需要先安装mcrypt扩展库 1 $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); 2 $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); 3 $key = "This is a very secret key";//密钥 4 $text
joshua317
2018/04/16
2.9K0
PHP 基于 Mcrypt 的加密解密简单类
最近的一个项目项目中需要对 Cookie 加密,所以使用到了 Mcrypt 的方法进行加密解密的工作,于是我就整理成一个简单的类,以后直接简单调用类实现即可。
Denis
2023/04/15
5840
php des加密用java解析不了 改个模式 加个IV php密钥/IV要求都是8位
php des加密用java解析不了 改个模式 加个IV  php密钥/IV要求都是8位
oktokeep
2024/10/09
1010
PHP AES(运算模式 ECB,填充方式PKCS7) 加密解密
class Security{ public static function encrypt($input, $key) { if (substr(PHP_VERSION, 0, 1) == '7') { return self::opensslEncrypt($input,$key); }else{ return self::mcryptEncrypt($input,$key)
IT工作者
2022/02/25
2.1K0
php中常用的Rc4/Des/AuthCode可逆加密函数
首先是AuthCode可逆加密函数,在dz论坛等各大程序的数据传输和登陆验证都有用到。
V站CEO-西顾
2018/06/10
1.4K0
PHP 迁移 Mcrypt 至 OpenSSL 加密算法详解
对称加解密算法中,当前最为安全的是 AES 加密算法(以前应该是是 DES 加密算法),PHP 提供了两个可以用于 AES 加密算法的函数簇:Mcrypt 和 OpenSSL。
猿哥
2019/03/13
1.7K0
企业微信接口配置入坑指南
文件包括https://github.com/sbzhu/weworkapi_python/blob/master/callback/
一朵灼灼华
2022/08/05
1.4K0
MySQL常见安全小贴士和一些安全注意点
MySQL是最受DBA欢迎的数据库之一,易用性和高性能是MySQL数据库的标志。然而,高人气使得MySQL成为很多恶意个人和组织攻击的目标。默认安装的MySQL在安全措施方面存在较大隐患,特别是根密码空缺和缓冲区溢出的潜在漏洞,使其成为最容易受攻击的目标。在本文中,我们将介绍一些简单而有效的方法来加强数据库的安全性,以抵御本地以及远程的攻击。
大龄老码农-昊然
2021/04/03
6360
MySQL常见安全小贴士和一些安全注意点
PHP 7.1中AES加解密方法mcrypt_module_open()的替换方案
前言 mcrypt 扩展已经过时了大约10年,并且用起来很复杂。因此它被废弃并且被 OpenSSL 所取代。 从PHP 7.2起它将被从核心代码中移除并且移到PECL中。 PHP手册在7.1迁移页面给出了替代方案,就是用OpenSSL取代MCrypt. 示例代码
用户2323866
2021/07/12
9520
php api接口加密的两种方式
方法一:请求头加密参数 /** * api_sk = 接口密钥 (在面板设置页面 - API 接口中获取) * request_time = 当前请求时间的 uinx 时间戳 ( php: time() / python: time.time() ) * seqID 随机数用来避免同一秒多个请求 * 示例: $request_token = md5($request_time . ‘’ . md5($api_sk)) */ public fu
用户8099761
2023/05/11
1.1K0
php api接口加密的两种方式
PHP使用DES进行加密和解密
DES是一种标准的数据加密算法,关于这个算法的详细介绍可以参考wiki和百度百科: wiki百科 百度百科 php中有一个扩展可以支持DES的加密算法,是:extension=php_mcrypt.dll 在配置文件中将这个扩展打开还不能够在windows环境下使用 需要将PHP文件夹下的 libmcrypt.dll 拷贝到系统的 system32 目录下,这是通过phpinfo可以查看到mcrypt表示这个模块可以正常试用了。  下面是PHP中使用DES加密解密的一个例子: 1 //$input - s
joshua317
2018/04/16
1.2K0
PHP7使用openssl解密易班API中的用户数据
  自从PHP版本更新到了7.1以上以后,mcrypt扩展被废弃,使用mcrypt扩展会出现如下图的报错。只能使用openssl来代替。
雨落凋殇
2019/12/25
1.2K0
PHP7使用openssl解密易班API中的用户数据
php接口如何openssl_encrypt 使用 aes和des ,base64加密解密总结「建议收藏」
DES 是对称性加密里面常见一种,全称为 Data Encryption Standard,即数据加密标准,是一种使用密钥加密的块算法。密钥长度是64位(bit),超过位数密钥被忽略。所谓对称性加密即加密和解密密钥相同,对称性加密一般会按照固定长度,把待加密字符串分成块,不足一整块或者刚好最后有特殊填充字符。
全栈程序员站长
2022/07/19
2.5K0
推荐阅读
相关推荐
PHP的Mcrypt加密扩展知识了解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验