加入收藏 | 设为首页 | 会员中心 | 我要投稿 岳阳站长网 (https://www.0730zz.com.cn/)- 科技、建站、数据库平台、数据湖、视觉智能!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

标准PHP的AES加密算法类

发布时间:2022-06-21 09:54:46 所属栏目:PHP教程 来源:互联网
导读:AES是分组密钥,算法输入128位数据,密钥长度也是128位。用Nr表示对一个数据分组加密的轮数(加密轮数与密钥长度的关系如表1所列),每一轮都需要一个与输入分组具有相同长度的扩展密钥Expandedkey(i)的参与。 分享一个标准PHP的AES加密算法类,其中mcrypt_g
  AES是分组密钥,算法输入128位数据,密钥长度也是128位。用Nr表示对一个数据分组加密的轮数(加密轮数与密钥长度的关系如表1所列),每一轮都需要一个与输入分组具有相同长度的扩展密钥Expandedkey(i)的参与。
 
  分享一个标准PHP的AES加密算法类,其中mcrypt_get_block_size('rijndael-128', 'ecb');,如果在不明白原理的情况下比较容易搞错,可以通过mcrypt_list_algorithms函数查看你需要的加密算法标识,代码如下:
 
  <?php
  /**
   * AES128加解密类
   * @author dy
   *
   */
  defined('InEjbuy') or exit('Access Invalid!');
  class Aes{
      //密钥
      private $_secrect_key;
      public function __construct(){
          $this->_secrect_key = 'MYgGnQE2jDFADSFFDSEWsdD';
      }
      /**
       * 加密方法
       * @param string $str
       * @return string
       */
      public function encrypt($str){
          //AES, 128 ECB模式加密数据
          $screct_key = $this->_secrect_key;
          $screct_key = base64_decode($screct_key);
          $str = trim($str);
          $str = $this->addPKCS7Padding($str);
          $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_ECB),MCRYPT_RAND);
          $encrypt_str =  mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $screct_key, $str, MCRYPT_MODE_ECB, $iv);
          return base64_encode($encrypt_str);
      }
      /**
       * 解密方法
       * @param string $str
       * @return string
       */
      public function decrypt($str){
          //AES, 128 ECB模式加密数据
          $screct_key = $this->_secrect_key;
          $str = base64_decode($str);
          $screct_key = base64_decode($screct_key);
          $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128,MCRYPT_MODE_ECB),MCRYPT_RAND);
          $encrypt_str =  mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $screct_key, $str, MCRYPT_MODE_ECB, $iv);
          $encrypt_str = trim($encrypt_str);
          $encrypt_str = $this->stripPKSC7Padding($encrypt_str);
          return $encrypt_str;
      }
      /**
       * 填充算法
       * @param string $source
       * @return string
       */
      function addPKCS7Padding($source){
          $source = trim($source);
          $block = mcrypt_get_block_size('rijndael-128', 'ecb');
          $pad = $block - (strlen($source) % $block);
          if ($pad <= $block) {
              $char = chr($pad);
              $source .= str_repeat($char, $pad);
          }
          return $source;
      }
      /**
       * 移去填充算法
       * @param string $source
       * @return string
       */
      function stripPKSC7Padding($source){
          $source = trim($source);
          $char = substr($source, -1);
          $num = ord($char);
          if($num==62)return $source;
          $source = substr($source,0,-$num);
          return $source;
      }
  }
  以上就是本文所述的全部内容了,希望对大家学习php的AES加密算法类有所帮助。
 
 

(编辑:岳阳站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读