Home  >  Article  >  Backend Development  >  Summary of examples of AES encryption and decryption in php_PHP tutorial

Summary of examples of AES encryption and decryption in php_PHP tutorial

WBOY
WBOYOriginal
2016-07-13 10:24:501026browse

aesDemo.php:

Example,

Copy code The code is as follows:

require_once('./AES.php');
//$aes = new AES();
$aes = new AES(true);//Storage the encrypted string in hexadecimal format
//$aes = new AES (true,true);//With debugging information and the encrypted string is stored in hexadecimal
$key = "this is a 32 byte key";//Key
$keys = $aes- >makeKey($key);
$encode = "123456";// Encrypted string
$ct = $aes->encryptString($encode, $keys);
echo " encode = ".$ct."
";
$cpt = $aes->decryptString($ct, $keys);
echo "decode = ".$cpt;
? >

Example, AES encryption class

Copy code The code is as follows:

//php aes encryption class
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;
}

}
//How to use
$aes = new AESMcrypt($bit = 128, $key = 'abcdef1234567890', $iv = '0987654321fedcba', $mode = 'cbc');
$c = $aes->encrypt('haowei.me');
var_dump($aes->decrypt($c));

Example, attached with an encryptable and decryptable class

Copy code The code is as follows:

/**
* AES encryption and decryption classes
* @author hushangming
*
* Usage:
*
<br> * // Instantiation class <br> * // Parameters $_bit: format, supports 256, 192, 128, the default is 128 bytes <br> * // Parameter $_type: encryption/decryption method, supports cfb, cbc, nofb, ofb, stream, ecb, the default is ecb<br> * // Parameter $_key: key, default is abcdefghijuklmno<br> * $tcaes = new TCAES(); <br> * $string = 'laohu';<br> * // Encryption<br> * $ encodeString = $tcaes->encode($string);<br> * // Decrypt<br> * $decodeString = $tcaes->decode($encodeString);<br> * 

*/
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 key
* @param int $_bit uses 128 bytes by default
* @param string $_type encryption and decryption method
* @param boolean $_use_base64 uses base64 by default Encryption
*/
 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);
 }

 /**
* Encryption
* @param string $string String to be encrypted
* @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;
 }

 /**
* Decryption
* @param string $string String to be decrypted
* @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;
 }

 /**
* Convert $string to hexadecimal
* @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;
 }

 /**
* Convert hexadecimal stream $string to 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;
 }
}

www.bkjia.comtruehttp: //www.bkjia.com/PHPjc/825299.htmlTechArticleaesDemo.php: Example, copy the code as follows: ?php require_once('./AES.php'); //$aes = new AES(); $aes = new AES(true);// Store the encrypted string in hexadecimal...
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn