当前位置:首页 > PHP

php实现对称加密

2026-02-15 12:24:47PHP

PHP 实现对称加密的方法

对称加密使用相同的密钥进行加密和解密,以下是几种常见的实现方式:

使用 OpenSSL 扩展

PHP 的 OpenSSL 扩展提供了强大的加密功能,支持 AES 等对称加密算法。

$plaintext = "敏感数据";
$method = "AES-256-CBC";
$key = openssl_random_pseudo_bytes(32); // 生成随机密钥
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($method));

// 加密
$ciphertext = openssl_encrypt($plaintext, $method, $key, OPENSSL_RAW_DATA, $iv);
$encrypted = base64_encode($iv.$ciphertext);

// 解密
$decoded = base64_decode($encrypted);
$iv = substr($decoded, 0, openssl_cipher_iv_length($method));
$ciphertext = substr($decoded, openssl_cipher_iv_length($method));
$plaintext = openssl_decrypt($ciphertext, $method, $key, OPENSSL_RAW_DATA, $iv);

使用 Sodium 扩展

PHP 7.2+ 内置的 Sodium 扩展提供了现代加密算法,更安全且易于使用。

$plaintext = "敏感数据";
$key = sodium_crypto_secretbox_keygen(); // 生成随机密钥

// 加密
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
$ciphertext = sodium_crypto_secretbox($plaintext, $nonce, $key);

// 解密
$decrypted = sodium_crypto_secretbox_open($ciphertext, $nonce, $key);

使用 Mcrypt 扩展(已废弃)

虽然 Mcrypt 扩展在 PHP 7.1 中已被移除,但在旧版本中仍可使用:

$plaintext = "敏感数据";
$key = "32字节长度的密钥..."; // 必须准确长度
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC));

// 加密
$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $plaintext, MCRYPT_MODE_CBC, $iv);

// 解密
$plaintext = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $ciphertext, MCRYPT_MODE_CBC, $iv);

注意事项

  • 始终使用安全的随机数生成器(如 random_bytes()openssl_random_pseudo_bytes())生成密钥和 IV
  • 对于 AES,密钥长度必须准确(AES-128=16字节,AES-256=32字节)
  • 不要硬编码密钥,应安全存储
  • 考虑使用 HMAC 进行数据完整性验证
  • OpenSSL 和 Sodium 是推荐选择,Mcrypt 已过时

最佳实践

存储加密数据时,建议将 IV/nonce 与密文一起存储(通常前置),使用时再分离。对于传输,可以使用 base64 编码:

php实现对称加密

// 组合 IV 和密文
$encrypted = base64_encode($iv.$ciphertext);

// 分离 IV 和密文
$decoded = base64_decode($encrypted);
$iv = substr($decoded, 0, $ivLength);
$ciphertext = substr($decoded, $ivLength);

标签: 对称php
分享给朋友:

相关文章

php实现栈

php实现栈

栈的基本概念 栈(Stack)是一种遵循后进先出(LIFO)原则的数据结构。核心操作包括: push:元素入栈。 pop:元素出栈(返回并移除栈顶元素)。 peek:查看栈顶元素…

php 登录实现

php 登录实现

PHP 登录实现 PHP 登录功能通常包括用户认证、会话管理和安全性措施。以下是实现 PHP 登录功能的关键步骤。 数据库准备 创建一个用户表存储用户信息,通常包括用户名、密码(加密存储)和其他必要…

php实现跳转

php实现跳转

PHP 实现页面跳转的方法 在 PHP 中实现页面跳转有多种方式,以下是常见的几种方法及其适用场景: 使用 header() 函数 通过 header() 函数发送 HTTP 头部信息实现跳转。注意…

php 实现评论

php 实现评论

实现 PHP 评论功能 数据库设计 创建数据库表存储评论数据,通常包含以下字段: id:评论唯一标识 user_id:用户ID content:评论内容 created_at:评论时间 parent…

php array实现

php array实现

PHP 数组实现 PHP 数组是一种灵活的数据结构,可以存储多个值。以下是几种常见的实现方式: 索引数组 索引数组使用数字作为键名,默认从0开始递增。 $fruits = array("Apple…

php下载文件实现

php下载文件实现

PHP 下载文件实现方法 使用 header() 函数强制下载 设置合适的 HTTP 头信息,强制浏览器下载文件而非直接打开。 $file_path = '/path/to/file.pdf'; $…