php AES加密解密的例子
一共有两个文件:AES.php(aes算法类文件)和aesDemo.php(应用实例文件)
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加密类
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
|
<?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)); |
例子、附一个可加密可解密类
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
|
<?PHP/*** AES加密、解密类* @author hushangming* www.jbxue.com* 用法:* <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;}} |


浙公网安备 33010602011771号