您的位置:首页 > 编程语言 > PHP开发

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

2014-02-18 15:57 701 查看
<?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; }}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  AES 加密 解密