当前位置:首页 > 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 进行加密解密的示例:

php实现扩展加密解密

$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 的示例:

php实现扩展加密解密

$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:

$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
分享给朋友:

相关文章

git php实现

git php实现

Git 与 PHP 的集成实现 使用 PHP 执行 Git 命令 通过 PHP 的 exec()、shell_exec() 或 passthru() 函数可以直接调用 Git 命令,适用于服务器端操作…

php实现分类

php实现分类

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

php 函数实现

php 函数实现

PHP 函数实现基础 PHP 函数的定义使用 function 关键字,后跟函数名和参数列表。函数名不区分大小写,但建议保持一致。 function functionName($param1, $p…

php实现异步图片上传

php实现异步图片上传

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

php 实现 java md5加密

php 实现 java md5加密

PHP 实现 Java MD5 加密 Java 和 PHP 的 MD5 加密结果可能存在差异,主要由于字符编码和输出格式的不同。以下是确保 PHP 与 Java MD5 加密结果一致的方法。 确保字…

php 抢购实现

php 抢购实现

抢购系统设计要点 高并发抢购系统的核心在于解决超卖问题、保证数据一致性以及提升系统性能。PHP实现需结合数据库、缓存和队列等技术。 数据库层面优化 使用InnoDB引擎的事务特性确保数据一致性。商品…