当前位置:首页 > 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中实现文件上传需要使用$_FILES超全局数组处理上传的文件数据。表单必须设置enctype="multipart/form-data"属性,并采用POST方法提交。 创…

php实现分类

php实现分类

PHP实现分类的方法 数据库设计 创建分类表时,通常需要包含id、名称、父级id等字段。父级id用于实现多级分类结构。 CREATE TABLE categories ( id INT AU…

php实现接口

php实现接口

PHP 实现接口的方法 在 PHP 中,接口(Interface)用于定义一组方法的规范,而不实现具体功能。类可以实现一个或多个接口,并必须实现接口中定义的所有方法。 定义接口 接口使用 inter…

php实现静态

php实现静态

静态化实现方法 PHP实现静态化主要通过生成HTML文件或缓存机制来减少服务器动态解析的开销。以下是几种常见方法: 生成静态HTML文件 通过file_put_contents()将动态内容保存为H…

php搜索功能实现

php搜索功能实现

实现基本的PHP搜索功能 使用MySQL数据库和PHP实现简单的关键词搜索功能。需要确保数据库中有可供搜索的表和数据。 // 连接数据库 $conn = new mysqli('localhost'…

php实现过程

php实现过程

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