如何用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
相关产品推荐
相关产品推荐

