当前位置:首页 > PHP

aes php实现

2026-01-29 14:41:43PHP

AES 加密在 PHP 中的实现

PHP 提供了内置函数支持 AES 加密,主要通过 openssl_encryptopenssl_decrypt 实现。以下是 AES-256-CBC 模式的完整实现示例:

加密函数

function encryptAES($data, $key, $iv) {
    $cipher = "aes-256-cbc";
    $options = OPENSSL_RAW_DATA;
    $encrypted = openssl_encrypt($data, $cipher, $key, $options, $iv);
    return base64_encode($encrypted);
}

解密函数

function decryptAES($encryptedData, $key, $iv) {
    $cipher = "aes-256-cbc";
    $options = OPENSSL_RAW_DATA;
    $decrypted = openssl_decrypt(base64_decode($encryptedData), $cipher, $key, $options, $iv);
    return $decrypted;
}

密钥和 IV 生成

AES-256 需要 32 字节密钥和 16 字节初始化向量(IV),可以使用以下方法生成:

$key = openssl_random_pseudo_bytes(32); // 256位密钥
$iv = openssl_random_pseudo_bytes(16);  // 128位IV

使用示例

$plaintext = "Sensitive data";
$key = hex2bin("0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef");
$iv = hex2bin("abcdef9876543210abcdef9876543210");

$encrypted = encryptAES($plaintext, $key, $iv);
$decrypted = decryptAES($encrypted, $key, $iv);

echo "Encrypted: " . $encrypted . "\n";
echo "Decrypted: " . $decrypted;

安全注意事项

密钥应当通过安全方式存储,避免硬编码在代码中。IV 应当每次加密都重新生成,不需要保密但需要与密文一起存储。

对于需要存储的加密数据,建议将 IV 和密文一起存储:

$encryptedData = base64_encode($iv) . ':' . $encrypted;

解密时分离 IV 和密文:

list($ivPart, $dataPart) = explode(':', $encryptedData, 2);
$iv = base64_decode($ivPart);
$decrypted = decryptAES($dataPart, $key, $iv);

其他 AES 模式

PHP 支持多种 AES 模式,可通过修改 $cipher 参数切换:

  • aes-128-cbc (128位密钥)
  • aes-192-cbc (192位密钥)
  • aes-256-gcm (GCM 认证加密模式)

GCM 模式需要额外处理认证标签:

aes php实现

function encryptGCM($data, $key, $iv, &$tag) {
    return openssl_encrypt($data, 'aes-256-gcm', $key, OPENSSL_RAW_DATA, $iv, $tag);
}

function decryptGCM($data, $key, $iv, $tag) {
    return openssl_decrypt($data, 'aes-256-gcm', $key, OPENSSL_RAW_DATA, $iv, $tag);
}

标签: aesphp
分享给朋友:

相关文章

php实现websocket

php实现websocket

PHP 实现 WebSocket WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。PHP 可以通过多种方式实现 WebSocket 功能,以下是几种常见的方法: 使用 Ratc…

php实现mysql

php实现mysql

PHP 连接 MySQL 的基本方法 PHP 提供了多种方式与 MySQL 数据库进行交互,以下是最常用的几种方法。 使用 MySQLi 扩展 MySQLi 是 MySQL 的改进扩展,支持面向对…

php 实现排序

php 实现排序

PHP 实现数组排序的方法 PHP 提供了多种内置函数和方法来实现数组排序,适用于不同的排序需求。以下是一些常见的排序实现方式: 使用 sort() 函数对数组进行升序排序 sort() 函数对数组…

php 实现单点登录

php 实现单点登录

PHP 实现单点登录的方法 单点登录(SSO)允许用户通过一次登录访问多个相互信任的系统。以下是基于 PHP 的实现方案: 基于共享 Session 的方案 在同一个主域名下的子域名间可以通过共享…

php实现mvc

php实现mvc

PHP 实现 MVC 架构 MVC(Model-View-Controller)是一种常用的软件设计模式,将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller…

php实现定时

php实现定时

PHP 实现定时任务的方法 PHP 本身是脚本语言,通常需要借助外部工具或框架实现定时任务。以下是几种常见方法: 使用 Cron 任务 Linux 系统自带的 Cron 是常用的定时任务工具。通过编…