程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 標准PHP的AES加密算法類

標准PHP的AES加密算法類

編輯:關於PHP編程

     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加密算法類有所幫助。

    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved