• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    PHP实现的AES加密、解密封装类与用法示例

    本文实例讲述了PHP实现的AES加密、解密封装类与用法。分享给大家供大家参考,具体如下:

    ?php
    /**
     * Class AES
     * 用于AES加解密数据
     * time:2018-04-27
     */
    class AES
    {
      protected $cipher = MCRYPT_RIJNDAEL_256; //AES加密算法
      protected $mode = MCRYPT_MODE_CBC; //采用cbc加密模式
      protected $key; //密钥
      protected $iv; //cbc模式加密向量,如为空将采用密钥代替
      /**
       * AES constructor.
       *
       * @param   $key 密钥
       * @param null $iv 向量 可选 如为空将采用密钥代替
       *
       * @throws Exception
       */
      public function __construct($key, $iv = NULL)
      {
        if (!extension_loaded("mcrypt")) {
    //      throw new \Exception("mcrypt extension do not exist. it was DEPRECATED in PHP 7.1.0, and REMOVED in PHP 7.2.0. use OpenSSL instead");
        }
        $this->key = $key;
        $this->iv = $iv;
      }
      /**
       * 加密数据
       * @param $data
       *
       * @return string
       */
      public function encrypt($data)
      {
        $td = mcrypt_module_open($this->cipher, '', $this->mode, '');
        $key = hash("sha256", $this->key, true);
        $iv = isset($this->iv) ? hash("sha256", $this->iv, true) : $key;
        $data = $this->padding($data);
        mcrypt_generic_init($td, $key, $iv);
        $encryptedData = base64_encode(mcrypt_generic($td, $data));
        mcrypt_generic_deinit($td);
        mcrypt_module_close($td);
        return $encryptedData;
      }
      /**
       * 解密数据
       * @param $data
       *
       * @return bool|string
       */
      public function decrypt($data)
      {
        $td = mcrypt_module_open($this->cipher, '', $this->mode, '');
        $key = hash("sha256", $this->key, true);
        $iv = isset($this->iv) ? hash("sha256", $this->iv, true) : $key;
        mcrypt_generic_init($td, $key, $iv);
        $decrypted_data = mdecrypt_generic($td, base64_decode($data));
        mcrypt_generic_deinit($td);
        mcrypt_module_close($td);
        return $this->unPadding($decrypted_data);
      }
      /**
       * 填充数据到分组大小的整数倍
       * @param null $data
       *
       * @return string
       */
      protected function padding($data = null)
      {
        $blockSize = 32; //MCRYPT_RIJNDAEL_256算法的分组大小是32字节
        $pad = $blockSize - (strlen($data) % $blockSize);
        return $data . str_repeat(chr($pad), $pad);
      }
      /**
       * 去掉填充的数据
       * @param null $data
       *
       * @return bool|string
       */
      protected function unPadding($data = null)
      {
        $pad = ord($data[strlen($data) - 1]);
        if ($pad > strlen($data)) {
          return false;
        }
        if (strspn($data, chr($pad), strlen($data) - $pad) != $pad) {
          return false;
        }
        return substr($data, 0, -1 * $pad);
      }
      /**
       * @return mixed
       */
      public function getSecretKey()
      {
        return $this->key;
      }
      /**
       * @param mixed $key
       */
      public function setSecretKey($key)
      {
        $this->key = $key;
      }
      /**
       * @return null
       */
      public function getIv()
      {
        return $this->iv;
      }
      /**
       * @param null $iv
       */
      public function setIv($iv)
      {
        $this->iv = $iv;
      }
    }
    //使用方法:
    $keyStr = 'sq8f77fwhksk';
    $aes = new AES($keyStr);
    $str = 'www.jb51.net';
    $chgstr = $aes->encrypt($str);
    echo $chgstr;
    echo "br/>";
    $rstr = $aes->decrypt($chgstr);
    echo $rstr;
    ?>

    运行结果:

    pDyiRRNaxlss2b6SgoiVPdkD2m1QWhX393lh2iFgGdY=
    www.jb51.net

    PS:关于加密解密感兴趣的朋友还可以参考本站在线工具:

    文字在线加密解密工具(包含AES、DES、RC4等):
    http://tools.jb51.net/password/txt_encode

    MD5在线加密工具:
    http://tools.jb51.net/password/CreateMD5Password

    在线散列/哈希算法加密工具:
    http://tools.jb51.net/password/hash_encrypt

    在线MD5/hash/SHA-1/SHA-2/SHA-256/SHA-512/SHA-3/RIPEMD-160加密工具:
    http://tools.jb51.net/password/hash_md5_sha

    在线sha1/sha224/sha256/sha384/sha512加密工具:
    http://tools.jb51.net/password/sha_encode

    更多关于PHP相关内容感兴趣的读者可查看本站专题:《php加密方法总结》、《PHP编码与转码操作技巧汇总》、《PHP数学运算技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《PHP数据结构与算法教程》、《php程序设计算法总结》及《php正则表达式用法总结》

    希望本文所述对大家PHP程序设计有所帮助。

    您可能感兴趣的文章:
    • 六种php加密解密方法实例讲解
    • PHP rsa加密解密算法原理解析
    • 基于PHP实现解密或加密Cloudflar邮箱保护
    • php中加密解密DES类的简单使用方法示例
    • php的RSA加密解密算法原理与用法分析
    • RSA实现JS前端加密与PHP后端解密功能示例
    • Js通过AES加密后PHP用Openssl解密的方法
    • PHP实现的AES双向加密解密功能示例【128位】
    • PHP实现的XXTEA加密解密算法示例
    • PHP实现基于3DES算法加密解密字符串示例
    • PHP实现的DES加密解密类定义与用法示例
    • 基于PHP RSA密文过长加密解密 越过1024的解决方法
    • PHP的RSA加密解密方法以及开发接口使用
    • PHP使用自定义key实现对数据加密解密的方法
    • php实现的三个常用加密解密功能函数示例
    • PHP代码加密和扩展解密实战
    上一篇:lnmp安装多版本PHP共存的方法详解
    下一篇:thinkPHP5框架闭包函数与子查询传参用法示例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    PHP实现的AES加密、解密封装类与用法示例 PHP,实现,的,AES,加密,解密,