You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PHP实现AES加密解密:含密钥存储、加解密及页面输出需求

PHP AES-256-CBC 加解密完整实现方案

前置说明

你需要提前准备好base64编码的256位AES密钥,如果还没有生成可用密钥,可以临时使用下面这行代码生成:
$generatedKey = base64_encode(openssl_random_pseudo_bytes(32));

以下是完整可直接运行的PHP文件代码:

<?php
// 加密函数
function encryptData($data, $key) {
    // 解码base64格式的密钥,得到256位原始密钥
    $encryption_key = base64_decode($key);
    // 生成对应加密算法所需长度的IV
    $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
    // 执行AES-256-CBC加密
    $encrypted = openssl_encrypt($data, 'aes-256-cbc', $encryption_key, 0, $iv);
    // 将IV和密文拼接后base64编码返回,方便存储传输
    return base64_encode($encrypted . '::' . $iv);
}

// 解密函数
function decryptData($data, $key) {
    // 解码base64格式的密钥,得到256位原始密钥
    $encryption_key = base64_decode($key);
    // 拆分密文和IV
    list($encrypted_data, $iv) = explode('::', base64_decode($data), 2);
    // 执行解密返回明文
    return openssl_decrypt($encrypted_data, 'aes-256-cbc', $encryption_key, 0, $iv);
}

// -------------------------- 业务逻辑实现 --------------------------
// 1. 存储已生成的AES密钥,请替换为你自己生成的base64编码256位密钥
$aesKey = '替换为你自己生成的base64格式256位密钥';

// 2. 指定要加密的明文数据
$plainText = '*Fido!hcteF^';

// 3. 加密明文
$encryptedData = encryptData($plainText, $aesKey);

// 4.解密密文
$decryptedData = decryptData($encryptedData, $aesKey);

// 5. 输出所有数据到网页
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <meta charset="UTF-8">
    <title>AES加解密结果</title>
    <style>
        .item { margin: 15px 0; padding: 10px; border: 1px solid #eee; }
        .label { font-weight: bold; color: #2c3e50; }
        .content { word-break: break-all; margin-top: 5px; color: #34495e; }
    </style>
</head>
<body>
    <h1>AES-256-CBC 加解密测试结果</h1>
    <div class="item">
        <div class="label">AES密钥(base64编码):</div>
        <div class="content"><?php echo htmlspecialchars($aesKey); ?></div>
    </div>
    <div class="item">
        <div class="label">原始明文:</div>
        <div class="content"><?php echo htmlspecialchars($plainText); ?></div>
    </div>
    <div class="item">
        <div class="label">加密后数据:</div>
        <div class="content"><?php echo htmlspecialchars($encryptedData); ?></div>
    </div>
    <div class="item">
        <div class="label">解密后数据:</div>
        <div class="content"><?php echo htmlspecialchars($decryptedData); ?></div>
    </div>
</body>
</html>

运行说明

  • 运行前请确保PHP环境已开启openssl扩展,主流PHP集成环境默认都会开启该扩展
  • 每次刷新页面加密后的数据都会变化,是因为每次加密都会生成随机IV,属于正常现象,不影响解密结果正确性

内容的提问来源于stack exchange,提问作者Kelly Flenley

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.23 23:57:06