当前位置:首页 > PHP

php实现对称加密

2026-03-13 11:27:55PHP

PHP 实现对称加密的方法

对称加密使用相同的密钥进行加密和解密。PHP 提供了多种内置函数和扩展来实现对称加密,以下是几种常见的方法:

使用 OpenSSL 扩展

OpenSSL 是 PHP 中常用的加密扩展,支持 AES、DES 等对称加密算法。以下是一个使用 AES-256-CBC 加密的示例:

php实现对称加密

$plaintext = "This is a secret message";
$key = openssl_random_pseudo_bytes(32); // 256-bit key
$iv = openssl_random_pseudo_bytes(16); // 128-bit IV

// 加密
$ciphertext = openssl_encrypt(
    $plaintext,
    'aes-256-cbc',
    $key,
    OPENSSL_RAW_DATA,
    $iv
);

// 解密
$decrypted = openssl_decrypt(
    $ciphertext,
    'aes-256-cbc',
    $key,
    OPENSSL_RAW_DATA,
    $iv
);

echo "Original: $plaintext\n";
echo "Decrypted: $decrypted\n";

使用 Sodium 扩展

Sodium 是一个现代加密库,PHP 7.2+ 内置支持。以下是使用 Sodium 进行加密的示例:

php实现对称加密

$plaintext = "This is a secret message";
$key = sodium_crypto_secretbox_keygen(); // 生成随机密钥
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES); // 生成随机 nonce

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

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

echo "Original: $plaintext\n";
echo "Decrypted: $decrypted\n";

使用 Libsodium 兼容函数(PHP <7.2)

对于 PHP 7.2 以下版本,可以使用 Libsodium 的兼容函数:

$plaintext = "This is a secret message";
$key = random_bytes(32); // 256-bit key
$nonce = random_bytes(24); // 24-byte nonce

// 加密
$ciphertext = \Sodium\crypto_secretbox($plaintext, $nonce, $key);

// 解密
$decrypted = \Sodium\crypto_secretbox_open($ciphertext, $nonce, $key);

echo "Original: $plaintext\n";
echo "Decrypted: $decrypted\n";

使用 Mcrypt 扩展(已弃用)

Mcrypt 是一个较旧的加密扩展,已在 PHP 7.1 中弃用。不建议在新项目中使用,但以下是示例:

$plaintext = "This is a secret message";
$key = "ThisIsASecretKey123"; // 密钥
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_RAND);

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

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

echo "Original: $plaintext\n";
echo "Decrypted: $decrypted\n";

注意事项

  • 密钥管理:密钥必须安全存储,避免硬编码在代码中。
  • IV/Nonce:每次加密应使用不同的 IV 或 Nonce,避免重复使用。
  • 算法选择:推荐使用 AES-256 或 ChaCha20 等现代算法。
  • 错误处理:加密和解密操作可能失败,应检查返回值。

最佳实践

对于新项目,推荐使用 OpenSSL 或 Sodium 扩展。Sodium 提供了更简单的 API 和更高的安全性。OpenSSL 支持更多算法,但需要更多配置。Mcrypt 已过时,应避免使用。

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

相关文章

php实现树

php实现树

PHP实现树结构的方法 在PHP中实现树结构通常可以通过递归或迭代的方式完成。以下是几种常见的实现方法: 递归实现树结构 递归是处理树结构的自然方式,尤其适用于具有未知深度的树。 class Tr…

php实现聊天

php实现聊天

实现 PHP 聊天功能的方法 使用 WebSocket 和 PHP 实现实时聊天 WebSocket 是一种全双工通信协议,适合实现实时聊天功能。PHP 可以通过 Ratchet 库实现 WebSo…

php怎么实现登录功能

php怎么实现登录功能

数据库准备 创建用户表存储登录信息,通常包括用户名、密码(需加密)等字段。示例SQL: CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY…

php实现统计

php实现统计

PHP 实现统计功能 在 PHP 中实现统计功能通常涉及数据的收集、处理和展示。以下是一些常见的统计实现方法: 数据库数据统计 通过 SQL 查询可以直接从数据库中获取统计结果: $conn =…

php 实现无限分类

php 实现无限分类

无限分类的实现方法 无限分类通常用于构建多层级结构的数据,如商品分类、菜单管理等。以下是几种常见的实现方式: 邻接列表模型(Adjacency List) 这是最简单的实现方式,每个分类记录存储其父…

php实现过程

php实现过程

PHP 实现过程 PHP 是一种广泛使用的服务器端脚本语言,特别适合 Web 开发。以下是 PHP 实现过程的关键步骤和注意事项。 安装与配置 下载并安装 PHP,可以从官方 PHP 网站获取最新版…