当前位置: 移动技术网 > IT编程>开发语言>PHP > php中AES加密解密的例子小结

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

2019年03月30日  | 移动技术网IT编程  | 我要评论

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网