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; } } |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)