当前位置:首页 > PHP

php实现加解密

2026-03-13 12:35:48PHP

PHP 实现加密与解密的方法

使用 OpenSSL 扩展进行 AES 加密解密

OpenSSL 提供了强大的加密功能,支持 AES(高级加密标准)。以下是 AES-256-CBC 模式的示例:

$method = 'aes-256-cbc';
$key = openssl_random_pseudo_bytes(32); // 生成随机密钥
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length($method));

// 加密
$plaintext = "敏感数据";
$ciphertext = openssl_encrypt($plaintext, $method, $key, 0, $iv);

// 解密
$decrypted = openssl_decrypt($ciphertext, $method, $key, 0, $iv);

确保妥善保存 $key$iv,解密时需要它们。可以将 $iv 与密文一起存储,但密钥必须保密。

使用 password_hash 和 password_verify 进行密码哈希

对于密码存储,推荐使用 PHP 内置的密码哈希函数:

php实现加解密

// 创建密码哈希
$password = "user_password";
$hash = password_hash($password, PASSWORD_DEFAULT);

// 验证密码
if (password_verify($password, $hash)) {
    // 密码匹配
}

PASSWORD_DEFAULT 会自动使用当前最安全的算法(如 bcrypt)。无需手动处理盐值,函数会自动生成。

使用 Sodium 扩展进行现代加密

PHP 7.2+ 内置的 Sodium 扩展提供了更现代的加密方式:

php实现加解密

// 生成密钥对
$key_pair = sodium_crypto_box_keypair();
$public_key = sodium_crypto_box_publickey($key_pair);
$secret_key = sodium_crypto_box_secretkey($key_pair);

// 加密
$message = "秘密消息";
$nonce = random_bytes(SODIUM_CRYPTO_BOX_NONCEBYTES);
$ciphertext = sodium_crypto_box($message, $nonce, $public_key, $secret_key);

// 解密
$decrypted = sodium_crypto_box_open($ciphertext, $nonce, $public_key, $secret_key);

Sodium 提供了更安全的默认参数和更简单的 API,适合现代应用程序。

使用 hash_hmac 进行数据验证

HMAC(哈希消息认证码)可用于验证数据完整性:

$data = "需要验证的数据";
$secret = "共享密钥";
$hmac = hash_hmac('sha256', $data, $secret);

// 验证时重新计算并比较
$received_hmac = "...";
if (hash_equals($hmac, $received_hmac)) {
    // 数据未被篡改
}

注意使用 hash_equals 而不是直接比较,以防止时序攻击。

注意事项

  • 永远不要使用已弃用的函数如 mcrypt_*
  • 对于密码存储,必须使用专门设计的函数如 password_hash
  • 加密密钥必须妥善保管,考虑使用密钥管理服务
  • 在 Web 应用中,考虑使用 HTTPS 保护传输中的数据
  • 定期更新加密库和 PHP 版本以获取安全补丁

根据具体需求选择合适的加密方法。数据加密选择对称加密如 AES,密码存储使用专门哈希函数,数据传输考虑非对称加密或 TLS。

标签: 加解密php
分享给朋友:

相关文章

php实现定时任务

php实现定时任务

PHP 实现定时任务的几种方法 在 PHP 中实现定时任务可以通过多种方式完成,具体选择取决于项目需求和服务器环境。以下是常见的实现方法: 使用 Cron 任务 Cron 是 Linux 系统中常用…

php长连接实现

php长连接实现

PHP 长连接实现方法 长连接(Keep-Alive)允许客户端与服务器在一次TCP连接中发送和接收多个HTTP请求/响应,减少重复建立连接的开销。以下是PHP中实现长连接的几种方式: 配置HTTP…

php实现上传

php实现上传

PHP 文件上传实现 HTML 表单设置 创建一个包含文件上传字段的 HTML 表单,确保表单的 enctype 属性设置为 multipart/form-data,这是文件上传必需的设置。 <…

php实现mysql

php实现mysql

PHP 连接 MySQL 的基本方法 PHP 提供了多种方式与 MySQL 数据库进行交互,以下是最常用的几种方法。 使用 MySQLi 扩展 MySQLi 是 MySQL 的改进扩展,支持面向对…

php搜索功能实现的

php搜索功能实现的

PHP 搜索功能实现方法 数据库搜索实现 使用 SQL 的 LIKE 语句进行模糊匹配,适用于小型网站和简单搜索需求。 $searchTerm = $_GET['search']; $query =…

php mvc实现

php mvc实现

PHP MVC 实现步骤 模型(Model)层 模型负责数据处理和业务逻辑,通常与数据库交互。创建一个基类模型,其他具体模型继承它。 class Model { protected $db;…