Heim  >  Artikel  >  Backend-Entwicklung  >  Zusammenfassung von Beispielen für AES-Verschlüsselung und -Entschlüsselung in PHP

Zusammenfassung von Beispielen für AES-Verschlüsselung und -Entschlüsselung in PHP

高洛峰
高洛峰Original
2016-12-21 10:21:101443Durchsuche

aesDemo.php:

Beispiel,

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

Beispiel, AES-Verschlüsselungsklasse

<?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));

Beispiel, mit einer verschlüsselbaren und entschlüsselbaren Klasse

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

Weitere Beispiele für die AES-Verschlüsselung und -Entschlüsselung in PHP und verwandte Artikel finden Sie auf der chinesischen PHP-Website!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn