PHP7.2中基于thinkphp框架封装AES加密解密方法mcrypt_module_open()替换方案

53 篇文章 1 订阅
22 篇文章 1 订阅

PHP7.2中AES加密解密方法mcrypt_module_open替换方案

前言

php的mcrypt 扩展已经过时了大约10年,并且用起来很复杂。因此它被废弃并且被 OpenSSL 所取代。 从PHP 7.2起它将被从核心代码中移除并且移到PECL中。PHP手册在7.1迁移页面给出了替代方案,就是用OpenSSL取代MCrypt,如果是新项目,还是使用 openssl_decrypt 来代替 mcrypt_encrypt 来做双向加密解密吧

封装Aes加密解密类

我用的thinkphp5 ,所以是基于thinkphp框架做的封装

在thinkphpwu\application\common\lib 目录下创建Aes.php

在这里插入图片描述

<?php

namespace app\common\lib;

class Aes
{

    private $key = null;
    private $iv = null;

    public function __construct()
    {
        // 需要小伙伴在配置文件app.php中定义aeskey
        $this->iv = config('app.aesiv');
        $this->key = config('app.aeskey');
        $this->key = hash('sha256', $this->key, true);
    }


    public function encrypt($input)
    {
        $data = openssl_encrypt($input, 'AES-256-CBC', $this->key, OPENSSL_RAW_DATA, $this->hexToStr($this->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->iv));
        return $decrypted;
    }

    function hexToStr($hex)
    {
        $string = '';
        for ($i = 0; $i < strlen($hex) - 1; $i += 2) {
            $string .= chr(hexdec($hex[$i] . $hex[$i + 1]));
        }
        return $string;
    }

}

在thinkphpwu\application\extra修改公共配置文件的key和iv的值
在这里插入图片描述

<?php

return [
    'admin_password_pre' => '_qipa250',//后台管理员密码加密后缀
    'aeskey' => 'QiPa250',//aes 密钥,服务端和客户端保持一致
    'aesiv' => '12345678901234567890123456789012',//aes 密钥,服务端和客户端保持一致
];

测试加密解密

<?php

namespace app\api\controller;

use think\Controller;

use app\common\lib\exception\ApiException;

use app\common\lib\Aes;

/*
 * api接口模块的公共控制器
 */

class Common extends Controller
{

    public function _initialize()
    {    
        $this->testAes();
    }

    public function testAes()
    {
        $str = 'name=奇葩天地网&url=www.qipa250.com';
		$aes_str = (new Aes())->encrypt($str);
        echo '加密' . $aes_str;
        echo "\n";
        echo '解密' . (new Aes())->decrypt($aes_str);
        exit();
    }
}

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值