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

Summary of examples of AES encryption and decryption in php

高洛峰
高洛峰Original
2016-12-21 10:21:101448browse

aesDemo.php:

examples,

<?php
require_once(&#39;./AES.php&#39;);
//$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;
?>

examples, AES encryption class

<?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 &#39;ecb&#39;:$this->mode = MCRYPT_MODE_ECB; break;
case &#39;cfb&#39;:$this->mode = MCRYPT_MODE_CFB; break;
case &#39;ofb&#39;:$this->mode = MCRYPT_MODE_OFB; break;
case &#39;nofb&#39;:$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 = &#39;abcdef1234567890&#39;, $iv = &#39;0987654321fedcba&#39;, $mode = &#39;cbc&#39;);
$c = $aes->encrypt(&#39;haowei.me&#39;);
var_dump($aes->decrypt($c));

examples, with an encryptable and decryptable class

<?PHP
/**
 * AES加密、解密类
 * @author hushangming
 * 
 * 用法:
 * <pre class="brush:php;toolbar:false">
 * // 实例化类
 * // 参数$_bit:格式,支持256、192、128,默认为128字节的
 * // 参数$_type:加密/解密方式,支持cfb、cbc、nofb、ofb、stream、ecb,默认为ecb
 * // 参数$_key:密钥,默认为abcdefghijuklmno
 * $tcaes = new TCAES(); 
 * $string = &#39;laohu&#39;;
 * // 加密
 * $encodeString = $tcaes->encode($string);
 * // 解密
 * $decodeString = $tcaes->decode($encodeString);
 * 
*/ 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; } }

For more examples of AES encryption and decryption in php, please pay attention to the PHP Chinese website for related articles!


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