萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> php編程 >> php中AES加密解密的例子小結

php中AES加密解密的例子小結

 話不多說,先放上代碼,一共有兩個文件:AES.php(aes算法類文件)和aesDemo.php(應用實例文件)

aesDemo.php:   例子,    代碼如下: <?php require_once('./AES.php'); //$aes = new AES(); $aes = new AES(true);// 把加密後的字符串按十六進制進行存儲 //$aes = new AES(true,true);// 帶有調試信息且加密字符串按十六進制存儲 $key = "this is a 32 byte key";// 密鑰 $keys = $aes->makeKey($key); $encode = "123456";// 被加密的字符串 $ct = $aes->encryptString($encode, $keys); echo "encode = ".$ct."<br>"; $cpt = $aes->decryptString($ct, $keys); echo "decode = ".$cpt; ?>     例子、AES加密類  代碼如下: <?php //php aes加密類 class AESMcrypt {   public $iv = null; public $key = null; public $bit = 128; private $cipher;   public function __construct($bit, $key, $iv, $mode) { if(empty($bit) || empty($key) || empty($iv) || empty($mode)) return NULL;   $this->bit = $bit; $this->key = $key; $this->iv = $iv; $this->mode = $mode;   switch($this->bit) { case 192:$this->cipher = MCRYPT_RIJNDAEL_192; break; case 256:$this->cipher = MCRYPT_RIJNDAEL_256; break; default: $this->cipher = MCRYPT_RIJNDAEL_128; }    switch($this->mode) { case 'ecb':$this->mode = MCRYPT_MODE_ECB; break; case 'cfb':$this->mode = MCRYPT_MODE_CFB; break; case 'ofb':$this->mode = MCRYPT_MODE_OFB; break; case 'nofb':$this->mode = MCRYPT_MODE_NOFB; break; default: $this->mode = MCRYPT_MODE_CBC; } }   public function encrypt($data) { $data = base64_encode(mcrypt_encrypt( $this->cipher, $this->key, $data, $this->mode, $this->iv)); return $data; }   public function decrypt($data) { $data = mcrypt_decrypt( $this->cipher, $this->key, base64_decode($data), $this->mode, $this->iv); $data = rtrim(rtrim($data), ".."); return $data; }   } //使用方法 $aes = new AESMcrypt($bit = 128, $key = 'abcdef1234567890', $iv = '0987654321fedcba', $mode = 'cbc'); $c = $aes->encrypt('haowei.me'); var_dump($aes->decrypt($c));       例子、附一個可加密可解密類  代碼如下: <?PHP /**  * AES加密、解密類  * @author hushangming  *   * 用法:  * <pre>  * // 實例化類  * // 參數$_bit:格式,支持256、192、128,默認為128字節的  * // 參數$_type:加密/解密方式,支持cfb、cbc、nofb、ofb、stream、ecb,默認為ecb  * // 參數$_key:密鑰,默認為abcdefghijuklmno  * $tcaes = new TCAES();   * $string = 'laohu';  * // 加密  * $encodeString = $tcaes->encode($string);  * // 解密  * $decodeString = $tcaes->decode($encodeString);  * </pre>  */ class TCAES{  private $_bit = MCRYPT_RIJNDAEL_256;  private $_type = MCRYPT_MODE_CBC;  //private $_key = 'abcdefghijuklmno0123456789012345';  private $_key = 'abcdefghijuklmno'; // 密鑰  private $_use_base64 = true;  private $_iv_size = null;  private $_iv = null;    /**   * @param string $_key 密鑰   * @param int $_bit 默認使用128字節   * @param string $_type 加密解密方式   * @param boolean $_use_base64 默認使用base64二次加密   */  public function __construct($_key = '', $_bit = 128, $_type = 'ecb', $_use_base64 = true){   // 加密字節   if(192 === $_bit){    $this->_bit = MCRYPT_RIJNDAEL_192;   }elseif(128 === $_bit){    $this->_bit = MCRYPT_RIJNDAEL_128;   }else{    $this->_bit = MCRYPT_RIJNDAEL_256;   }   // 加密方法   if('cfb' === $_type){    $this->_type = MCRYPT_MODE_CFB;   }elseif('cbc' === $_type){    $this->_type = MCRYPT_MODE_CBC;   }elseif('nofb' === $_type){    $this->_type = MCRYPT_MODE_NOFB;   }elseif('ofb' === $_type){    $this->_type = MCRYPT_MODE_OFB;   }elseif('stream' === $_type){    $this->_type = MCRYPT_MODE_STREAM;   }else{    $this->_type = MCRYPT_MODE_ECB;   }   // 密鑰   if(!empty($_key)){    $this->_key = $_key;   }   // 是否使用base64   $this->_use_base64 = $_use_base64;     $this->_iv_size = mcrypt_get_iv_size($this->_bit, $this->_type);   $this->_iv = mcrypt_create_iv($this->_iv_size, MCRYPT_RAND);  }    /**   * 加密   * @param string $string 待加密字符串   * @return string   */  public function encode($string){   if(MCRYPT_MODE_ECB === $this->_type){    $encodeString = mcrypt_encrypt($this->_bit, $this->_key, $string, $this->_type);    }else{    $encodeString = mcrypt_encrypt($this->_bit, $this->_key, $string, $this->_type, $this->_iv);   }   if($this->_use_base64)    $encodeString = base64_encode($encodeString);   return $encodeString;  }    /**   * 解密   * @param string $string 待解密字符串   * @return string   */  public function decode($string){   if($this->_use_base64)    $string = base64_decode($string);     $string = $this->toHexString($string);   if(MCRYPT_MODE_ECB === $this->_type){    $decodeString = mcrypt_decrypt($this->_bit, $this->_key, $string, $this->_type);   }else{    $decodeString = mcrypt_decrypt($this->_bit, $this->_key, $string, $this->_type, $this->_iv);   }   return $decodeString;  }    /**   * 將$string轉換成十六進制   * @param string $string   * @return stream   */  private function toHexString ($string){   $buf = "";   for ($i = 0; $i < strlen($string); $i++){    $val = dechex(ord($string{$i}));    if(strlen($val)< 2)     $val = "0".$val;    $buf .= $val;   }   return $buf;  }    /**   * 將十六進制流$string轉換成字符串   * @param stream $string   * @return string   */  private function fromHexString($string){   $buf = "";   for($i = 0; $i < strlen($string); $i += 2){    $val = chr(hexdec(substr($string, $i, 2)));    $buf .= $val;   }   return $buf;  } }  
copyright © 萬盛學電腦網 all rights reserved