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

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

    • 前言
    • 封装Aes加密解密类
    • 测试加密解密

前言

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

PHP7.2中基于thinkphp框架封装AES加密解密方法mcrypt_module_open()替换方案_第1张图片



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的值
PHP7.2中基于thinkphp框架封装AES加密解密方法mcrypt_module_open()替换方案_第2张图片



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

测试加密解密



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();
    }
}

PHP7.2中基于thinkphp框架封装AES加密解密方法mcrypt_module_open()替换方案_第3张图片

你可能感兴趣的:(Api,Php,Thinkphp框架)