🗣 Wd提问: AES加密PHP源码
🤖 Ai回答: 以下是使用 PHP 实现 AES 加密的完整示例代码,支持 AES-128-CBC 模式(常见且安全的模式之一),并包含加密和解密功能。
php
<?php
class AES {
private $key; // 加密密钥,必须是 16、24 或 32 字节(对应 AES-128、AES-192、AES-256)
private $iv; // 初始化向量,必须是 16 字节
public function __construct($key, $iv) {
$this-key = $key;
$this-iv = $iv;
}
/**
* AES 加密
* @param string $data 要加密的数据
* @return string 加密后的数据(Base64 编码)
*/
public function encrypt($data) {
// 使用 AES-128-CBC 模式
$encrypted = openssl_encrypt($data, 'AES-128-CBC', $this-key, OPENSSL_RAW_DATA, $this-iv);
// 返回 Base64 编码的密文
return base64_encode($encrypted);
}
/**
* AES 解密
* @param string $data 要解密的数据(Base64 编码)
* @return string 解密后的数据
*/
public function decrypt($data) {
// 解码 Base64 数据
$encryptedData = base64_decode($data);
// 解密
$decrypted = openssl_decrypt($encryptedData, 'AES-128-CBC', $this-key, OPENSSL_RAW_DATA, $this-iv);
return $decrypted;
}
}
// 示例使用
$key = 'your-16-or-24-or-32-byte-key-here'; // 必须是 16、24 或 32 字节
$iv = 'your-16-byte-iv-here'; // 必须是 16 字节
$aes = new AES($key, $iv);
// 要加密的数据
$data = Hello, World! This is a secret message.;
// 加密
$encrypted = $aes-encrypt($data);
echo 加密结果: 、$encrypted 、\n;
// 解密
$decrypted = $aes-decrypt($encrypted);
echo 解密结果: 、$decrypted 、\n;
?
🔐 注意事项:
1、密钥长度:
AES 支持 128、192、256 位密钥。
PHP 中使用 `openssl_encrypt` 时,密钥长度必须是 16(AES-128)、24(AES-192)或 32(AES-256)字节。
建议使用 `openssl_random_pseudo_bytes(32)` 生成安全密钥。
2、IV(初始化向量):
必须是 16 字节(AES 块大小)。
不能重复使用,但可以公开传输(通常与密文一起发送)。
建议使用 `openssl_random_pseudo_bytes(16)` 生成。
3、加密模式:
示例使用 `AES-128-CBC`,这是常用且安全的模式。
更安全的模式如 `GCM` 可以使用,但需要 PHP 7.1+ 和 `openssl_encrypt` 支持。
4、安全性建议:
密钥和 IV 应该安全存储,不要硬编码在代码中。
使用 HTTPS 传输密文。
考虑使用 `openssl_random_pseudo_bytes()` 生成随机密钥和 IV。
✅ 安全生成密钥和 IV 的示例:
php
// 生成安全密钥(32 字节,AES-256)
$key = openssl_random_pseudo_bytes(32);
// 生成 IV(16 字节)
$iv = openssl_random_pseudo_bytes(16);
// 存储或传输 key 和 iv(例如保存到数据库或配置文件)
echo 密钥: 、bin2hex($key) 、\n;
echo IV: 、bin2hex($iv) 、\n;
🔄 更安全的模式(推荐):AES-256-GCM
php
class AESGCM {
private $key;
public function __construct($key) {
$this-key = $key;
}
public function encrypt($data, $aad = '') {
$iv = openssl_random_pseudo_bytes(12); // GCM 使用 12 字节 IV
$encrypted = openssl_encrypt($data, 'aes-256-gcm', $this-key, OPENSSL_RAW_DATA, $iv, $tag, $aad);
return base64_encode($iv 、$tag 、$encrypted);
}
public function decrypt($data, $aad = '') {
$data = base64_decode($data);
$iv = substr($data, 0, 12);
$tag = substr($data, 12, 16);
$encrypted = substr($data, 28);
$decrypted = openssl_decrypt($encrypted, 'aes-256-gcm', $this-key, OPENSSL_RAW_DATA, $iv, $tag, $aad);
return $decrypted;
}
}
注意:GCM 模式提供认证加密(AEAD),比 CBC 更安全,推荐在新项目中使用。
✅ 总结
使用 `AES-128-CBC` 是安全的,但需注意 IV 和密钥管理。
推荐使用 `AES-256-GCM` 模式以获得更强的安全性。
密钥和 IV 必须安全生成和管理。
如需进一步支持,可提供具体需求(如密钥管理、前后端互通等)。
📣 商家广告:





0
IP地址: 232.50.64.172
搜索次数: 4
提问时间: 2025-11-10 16:01:27
🛒 域名购买:
z-j.net
cdn.hk.cn
965.net.cn
souru.com.cn
25.gs
wg.gs
2111.top
a-s.cn
389.net.cn
app.hl.cn
❓️ 热门提问:
国外vps建站便宜
做服务器的厂商
httpd服务器
高防服务器是什么原理
高密度服务器
香港vps租用
html设计网站
新网云vps
电脑进服务器
短域名服务
豌豆Ai站群搜索引擎系统
🌐 域名评估:
ff.ah.cn
wk.gs
osmu.cn
n-f.cn
v.gz.cn
oo.hn.cn
65.hk
eelh.cn
zkao.cn
mggg.com.cn
⛏ 最新挖掘:
凯里酸汤鱼
贵阳烤脑花
都匀毛尖茶
花溪牛肉粉
贵阳烤生蚝
贵阳烤豆腐
贵阳纸包鱼
贵阳特色菜
🖌 热门作画:
🤝 关于我们:
豌豆Ai
域名
建站
站群
留痕
推广
评估
源码
开发Ai
工具
日记
价格
加盟
广告
流量
留言
联系
🗨 加入群聊:
🔗 友情链接:
域名抢注工具
谷哥seo
ai提问
🧰 站长工具:
Ai工具 whois查询 搜索
📢 温馨提示:本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
👉 技术支持:本站由豌豆Ai提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。