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

來源:互聯網
上載者:User
aesDemo.php:

例子,

<?phprequire_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; }}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.