当前位置:首页 > PHP

php实现扩展加密解密

2026-01-29 03:36:46PHP

PHP 实现扩展加密解密的方法

使用 OpenSSL 扩展

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

$key = openssl_random_pseudo_bytes(32); // 256-bit key
$iv = openssl_random_pseudo_bytes(16); // 128-bit IV
$data = "Sensitive data";

// 加密
$encrypted = openssl_encrypt($data, 'aes-256-cbc', $key, 0, $iv);

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

使用 Sodium 扩展

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

$key = sodium_crypto_secretbox_keygen();
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
$message = "Secret message";

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

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

使用 Mcrypt 扩展(已废弃)

虽然 Mcrypt 在 PHP 7.1 中被移除,但在旧版本中仍可使用。以下是 Mcrypt 的示例:

$key = "ThisIsASecretKey";
$data = "Data to encrypt";
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);

// 加密
$encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv);

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

使用 Libsodium 进行公钥加密

Libsodium 还支持非对称加密:

$alice_keypair = sodium_crypto_box_keypair();
$alice_public = sodium_crypto_box_publickey($alice_keypair);
$alice_secret = sodium_crypto_box_secretkey($alice_keypair);

$bob_keypair = sodium_crypto_box_keypair();
$bob_public = sodium_crypto_box_publickey($bob_keypair);
$message = "Hello Bob";

// 加密
$nonce = random_bytes(SODIUM_CRYPTO_BOX_NONCEBYTES);
$encrypted = sodium_crypto_box($message, $nonce, $bob_public, $alice_secret);

// 解密
$decrypted = sodium_crypto_box_open($encrypted, $nonce, $alice_public, $bob_secret);

使用 Hash 进行单向加密

对于密码存储等单向加密场景,可以使用 password_hash:

php实现扩展加密解密

$password = "user_password";
$hash = password_hash($password, PASSWORD_DEFAULT);

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

注意事项

  • 始终使用强加密算法(如 AES-256、ChaCha20)
  • 确保 IV/nonce 是随机且唯一的
  • 妥善管理加密密钥
  • 对于密码存储,使用专门函数如 password_hash
  • 考虑使用 PHP 7.2+ 的 Sodium 扩展作为首选

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

相关文章

php实现搜索功能

php实现搜索功能

实现基础搜索功能 使用PHP和MySQL实现基础的搜索功能需要结合表单提交与数据库查询。创建一个HTML表单用于接收用户输入的搜索关键词,通过PHP处理表单数据并查询数据库。 // 搜索表单 (HT…

php实现搜索

php实现搜索

PHP实现搜索功能的方法 在PHP中实现搜索功能通常涉及数据库查询和用户输入的匹配。以下是几种常见的实现方式: 使用MySQL LIKE语句 通过简单的LIKE语句实现基础搜索: $searchT…

php 无限分类的实现

php 无限分类的实现

无限分类的实现方法 无限分类通常用于构建树形结构数据,如商品分类、多级菜单等。以下是几种常见的实现方式: 邻接列表模型(Adjacency List) 邻接列表是最简单的实现方式,通过在每个节点中存…

php实现异步图片上传

php实现异步图片上传

异步图片上传的实现方法 在PHP中实现异步图片上传通常需要结合前端JavaScript和后端PHP代码。以下是几种常见的方法: 使用XMLHttpRequest或Fetch API 前端使用Java…

php实现发帖

php实现发帖

PHP 实现发帖功能 要在 PHP 中实现发帖功能,通常需要结合数据库操作(如 MySQL)和前端表单提交。以下是实现发帖功能的关键步骤: 数据库表设计 创建一个帖子表(posts)存储发帖内容,基…

php 实现长轮询

php 实现长轮询

PHP 实现长轮询的方法 长轮询(Long Polling)是一种服务器推送技术,客户端发送请求后,服务器保持连接开放直到有新数据或超时。以下是实现步骤: 基础实现代码 创建一个简单的长轮询 PHP…