PHP7.2中AES加密解密方法mcrypt_module_open()替换方案
直接粘代码,该类是基于微信公众号消息加密解密所提供的PHP DEMO改造而来,目前使用于彬彬大学APP接口token校验中。
php的mcrypt 扩展已经过时了大约10年,并且用起来很复杂。因此它被废弃并且被 OpenSSL 所取代。 从PHP 7.2起它将被从核心代码中移除并且移到PECL中。PHP手册在7.1迁移页面给出了替代方案,就是用OpenSSL取代MCrypt.
- class Aes {
- private $hex_iv = '00000000000000000000000000000000'; # converted JAVA byte code in to HEX and placed it here
- private $key = '397e2eb61307109f6e68006ebcb62f98'; #Same as in JAVA
- function __construct($key) {
- $this->key = $key;
- $this->key = hash('sha256', $this->key, true);
- }
- /*
- function encrypt($str) {
- $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
- mcrypt_generic_init($td, $this->key, $this->hexToStr($this->hex_iv));
- $block = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
- $pad = $block - (strlen($str) % $block);
- $str .= str_repeat(chr($pad), $pad);
- $encrypted = mcrypt_generic($td, $str);
- mcrypt_generic_deinit($td);
- mcrypt_module_close($td);
- return base64_encode($encrypted);
- }
- function decrypt($code) {
- $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_CBC, '');
- mcrypt_generic_init($td, $this->key, $this->hexToStr($this->hex_iv));
- $str = mdecrypt_generic($td, base64_decode($code));
- $block = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
- mcrypt_generic_deinit($td);
- mcrypt_module_close($td);
- return $this->strippadding($str);
- }*/
- public function encrypt($input)
- {
- $data = openssl_encrypt($input, 'AES-256-CBC', $this->key, OPENSSL_RAW_DATA, $this->hexToStr($this->hex_iv));
- $data = base64_encode($data);
- return $data;
- }
- public function decrypt($input)
- {
- $decrypted = openssl_decrypt(base64_decode($input), 'AES-256-CBC', $this->key, OPENSSL_RAW_DATA, $this->hexToStr($this->hex_iv));
- return $decrypted;
- }
- /*
- For PKCS7 padding
- */
- private function addpadding($string, $blocksize = 16) {
- $len = strlen($string);
- $pad = $blocksize - ($len % $blocksize);
- $string .= str_repeat(chr($pad), $pad);
- return $string;
- }
- private function strippadding($string) {
- $slast = ord(substr($string, -1));
- $slastc = chr($slast);
- $pcheck = substr($string, -$slast);
- if (preg_match("/$slastc{" . $slast . "}/", $string)) {
- $string = substr($string, 0, strlen($string) - $slast);
- return $string;
- } else {
- return false;
- }
- }
- function hexToStr($hex)
- {
- $string='';
- for ($i=0; $i < strlen($hex)-1; $i+=2)
- {
- $string .= chr(hexdec($hex[$i].$hex[$i+1]));
- }
- return $string;
- }
- }
PHP7.2中AES加密解密方法mcrypt_module_open()替换方案相关推荐
- php7.1 aes 加密解密,PHP7.1中AES加密解密方法 mcrypt_module_open()替换方案
mcrypt 扩展已经过时了大约10年,并且用起来很复杂.因此它被废弃并且被 OpenSSL 所取代. 从PHP 7.2起它将被从核心代码中移除并且移到PECL中. PHP手册在7.1迁移页面给出了替 ...
- CryptoJS、Java中aes加密解密
前台 加密 // 16进制密文 function aesHexCryptoAesEncryption(word) {if (typeof (word) === 'object') { // 对象格式的 ...
- ios常见加密解密方法
在其他平台中经常会计算MD5值,在ios平台中也提供了该方法,首先需要导入头文件 [cpp] view plaincopy #import <CommonCrypto/CommonDigest. ...
- 理解AES加密解密的使用方法
很多人对于AES加密并不是很了解,导致互相之间进行加密解密困难. 本文用简单的方式来介绍AES在使用上需要的知识,而不涉及内部算法.最后给出例子来帮助理解AES加密解密的使用方法. AES的麻烦 相比 ...
- C#常用加密解密方法(AES加密解密)
在日常开发过程中,总会遇到需要加密解密的需求,这里我整理了C#常用的加密解密方法分享给大家. 先看看加密的基本概念: "加密",是一种限制对网络上传输数据的访问权的技术.原始数据( ...
- MySQL自带的AES加密解密比较常用的使用方法
接手的老项目中,有些SQL使用了MySQL自带的AES加密解密,为了方便操作数据,研究了一下使用方法,在这里记录一下. 加密 update user_password set password = H ...
- 基于PHP和JS的AES相互加密解密方法详解(CryptoJS)
在最近的项目中,前端后台数据交互需要进行加密之后传输使用,以保证系统数据的安全.有关数据加密解密的问题,有很多种加密的方式,在这里我选择了AES的加密方式.特此写下此篇博文,总结讲述下PHP和JS进行 ...
- java nodejs aes_Java与Node.js利用AES加密解密出相同结果的方法示例
前言 工作中遇到nodejs端通过aes加密,安卓客户端Java解密,同样nodejs也需要解密安卓客户端加密过来的内容,发现两个加密结果不一样,查询资料发现java端需要对密钥再MD5加密一遍,以下 ...
- C#开发中关于加密解密字符串的使用方法
C#开发中关于加密解密字符串的使用方法 C#加密解密字符串方法 首先在web.config | app.config 文件下增加如下代码: <?xml version="1.0&quo ...
最新文章
- #164 (Div. 2)
- 【C++ 语言】Visual Studio 配置 POSIX 线程 ( Windows 不支持 POSIX | 配置文件下载 | 库文件说明 | 配置过程 )
- 八个开源的 Spring Boot 学习资源,你值得拥有
- java 拦截所有路径_Java或Web中解决所有路径问题
- 算法学习笔记(三)-----各种基础排序问题
- 前端学习(2599):请求操作
- 70 SD配置-发票凭证配置-定义回扣协议类型
- RCNN,fast R-CNN,faster R-CNN
- [CC-CHEFINV]Chef and Swaps
- (2)I/O流对象-----FilterInputStream与FilterOutputStream
- matlab兔子问题,【matlab】狼追击兔子问题的建模
- 安装corelDraw x8过程遇到的坑
- 0704函数的递归调用
- excel求方差和标准差的函数_Excel计算方差和标准差
- java date类 时区_Java Date 与时区
- 网易2016招聘笔试升级之路Java代码
- 1. python爬虫
- 手写一个vue中英文翻译组件
- Ubuntu1804安装
- android vector 圆形,Android中矢量图形的那些事 - SVG or Vector