豌豆Ai站群搜索引擎系统 V.25.10.25 网址:www.wd.chat

🗣 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 必须安全生成和管理。

如需进一步支持,可提供具体需求(如密钥管理、前后端互通等)。

Ai作答

📣 商家广告


公司域名

.gs域名

广告招商

Ai评估

求名


0

IP地址: 122.239.69.139

搜索次数: 16

提问时间: 2025-12-18 08:47:16

🛒 域名购买

❓️ 热门提问

🌐 域名评估

最新挖掘

🖌 热门作画

🤝 关于我们

🗨 加入群聊

🔗 友情链接

🧰 站长工具
📢

温馨提示

本站所有 问答 均由Ai自动分析整理,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。

👉

技术支持

本站由 🟢 豌豆Ai 提供技术支持,使用的最新版: 豌豆Ai站群搜索引擎系统 V.25.10.25 搭建本站。

上一篇 84583 84584 84585 下一篇