php 7.1 openssl_decrypt() 代替 mcrypt_module_open() 方法

php 7.1 openssl_decrypt() 代替 mcrypt_module_open() 方法

公司开发微信第三方平台,之前用着一直是没有问题的。后来服务器到期进行项目搬迁就怎么也接收不到微信每10分钟的ticketle。

经过调试发现php版本由原来的7.0升到了7.1(该死….为什么没人告诉我)。mcrypt_module_open()函数在7.1中被贬低,将在7.2中被移除,要用openssl_decrypt()函数代替。废话不多说了。直接给代码

明文加密:

    原代码            

$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)

     修改为

$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);

明文解密

    原代码

$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);

    修改为

$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);

特此记录一下!完毕。

原文:https://blog.csdn.net/haibo_j/article/details/80759706

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/112421.html原文链接:https://javaforall.net

(0)
上一篇 2021年11月8日 上午8:00
下一篇 2021年11月8日 上午9:00


相关推荐

  • SOAPAction是什么?

    SOAPAction是什么?SOAPAction是什么?最近在工作中遇到一个SOAPAction的问题,正好拿出来研究一把。  据说SOAPActionheader这玩意在SOAP1.1规范中着实让不少开发者喝了一壶。真的有这么难理解么?我想这应该是因为SOAP有两种非常不同的使用方式,而SOAPAction主要是被用来支持其中应用较少的一种方式的原因。在我看来,这种方式也非常有价值。  让我们先看看S

    2022年7月24日
    24
  • ESAPI学习笔记

    ESAPI学习笔记ESAPI 学习笔记 nbsp nbsp nbsp nbsp ESAPI 是 owasp 提供的一套 API 级别的 web 应用解决方案 本人通过对 ESAPI 和其提供的 demo 源码学习发现 关键的不是对其所提供的 API 的使用 而是其 web 应用安全防御体系的构建的思想 比如 您不一定要使用 ESAPI 去实现日志系统 而是应该明白 一套好的日志系统应该是怎么样子的 应具备什么样的特性等 此外 在引入使用时可能会遇到不少麻烦

    2026年3月20日
    0
  • MJRefresh用法

    MJRefresh用法MJRefreshAne to refresh 用法简单的下拉刷新框架 一行代码搞定 ContentsGett 支持哪些控件的刷新 Installation 如何使用 MJRefresh Who susing 已经超过上百个 App 正在使用 MJRefresh Classes MJRefres

    2026年3月17日
    1
  • SpringBoot使用@Value给静态变量注入值

    SpringBoot使用@Value给静态变量注入值SpringBoot 中使用 Value 只能给普通变量注入值 不能直接给静态变量赋值例如 application dev properties 配置文件有如下配置 给普通变量赋值时 直接在变量声明之上添加 Value 注解即可 如下所示 当要给静态变量注入值的时候 若是在静态变量声明之上直接添加 Value 注解是无效的 例如 虽然没有编译和运行上的报错 经调试可

    2026年3月19日
    3
  • EditPlus正则表达式替换字符串详解

    EditPlus正则表达式替换字符串详解EditPlus的查找,替换,文件中查找支持以下的正则表达式:ExpressionDescription\tTabcharacter.\nNewline..Matchesanycharacter.|Eitherexpressiononitsleftandrightsidematchesthetargetstring.Forexa

    2022年5月13日
    200
  • 突破AI决策同步难题:ML-Agents多智能体协作优化指南

    突破AI决策同步难题:ML-Agents多智能体协作优化指南

    2026年3月15日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号