当前位置:首页 > PHP

php实现扩展加密解密

2026-02-14 01:48:07PHP

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

使用 OpenSSL 扩展

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

php实现扩展加密解密

$plaintext = "需要加密的数据";
$key = openssl_random_pseudo_bytes(32); // 256位密钥
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));

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

// 解密
$decoded = base64_decode($encrypted);
$iv = substr($decoded, 0, openssl_cipher_iv_length('aes-256-cbc'));
$ciphertext = substr($decoded, openssl_cipher_iv_length('aes-256-cbc'));
$decrypted = openssl_decrypt($ciphertext, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv);

使用 Sodium 扩展

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

php实现扩展加密解密

$plaintext = "需要加密的数据";
$key = sodium_crypto_secretbox_keygen(); // 生成随机密钥
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);

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

// 解密
$decoded = base64_decode($encrypted);
$nonce = substr($decoded, 0, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
$ciphertext = substr($decoded, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
$decrypted = sodium_crypto_secretbox_open($ciphertext, $nonce, $key);

使用 Mcrypt 扩展(已弃用)

Mcrypt 是 PHP 早期的加密扩展,但在 PHP 7.1 中已被弃用。以下是一个使用 Mcrypt 的示例(仅作参考):

$plaintext = "需要加密的数据";
$key = md5('secret_key', true); // 生成密钥
$iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC));

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

// 解密
$decoded = base64_decode($encrypted);
$iv = substr($decoded, 0, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC));
$ciphertext = substr($decoded, mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC));
$decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $ciphertext, MCRYPT_MODE_CBC, $iv);

使用 Libsodium 扩展

Libsodium 是 Sodium 的前身,需要手动安装。以下是一个使用 Libsodium 的示例:

$plaintext = "需要加密的数据";
$key = sodium_crypto_secretbox_keygen(); // 生成随机密钥
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);

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

// 解密
$decoded = base64_decode($encrypted);
$nonce = substr($decoded, 0, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
$ciphertext = substr($decoded, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
$decrypted = sodium_crypto_secretbox_open($ciphertext, $nonce, $key);

注意事项

  • 密钥管理:密钥应安全存储,避免硬编码在代码中。
  • IV/Nonce:每次加密都应使用唯一的 IV 或 Nonce。
  • 算法选择:优先使用现代加密算法(如 AES-256、ChaCha20)。
  • 错误处理:加密解密操作可能失败,应检查返回值并处理异常。

以上方法提供了 PHP 中常见的加密解密实现方式,开发者可根据项目需求选择合适的扩展和算法。

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

相关文章

php实现即时通讯

php实现即时通讯

PHP 实现即时通讯的方案 即时通讯(IM)可以通过多种方式实现,PHP 作为服务器端语言,通常需要结合前端技术(如 WebSocket、AJAX)或第三方服务来实现实时通信。以下是几种常见的实现方式…

php 线程实现

php 线程实现

PHP 线程实现方法 PHP 本身是单线程语言,但可以通过扩展或库实现多线程功能。以下是几种常见的实现方式: 使用 pthreads 扩展 pthreads 是一个 PHP 扩展,允许在 PHP 中…

php实现进度条

php实现进度条

PHP 实现进度条的方法 使用 HTML 和 CSS 结合 PHP 实现进度条 在 PHP 中,进度条通常通过 HTML 和 CSS 实现,PHP 负责计算进度并更新前端显示。 <di…

php array实现

php array实现

PHP 数组实现 PHP 数组是一种灵活的数据结构,可以存储多个值。以下是几种常见的实现方式: 索引数组 索引数组使用数字作为键名,默认从0开始递增。 $fruits = array("Apple…

php 实现https

php 实现https

在 PHP 中实现 HTTPS 确保 PHP 应用通过 HTTPS 协议安全传输数据,可以通过以下几种方式实现: 配置服务器强制 HTTPS 在 Web 服务器(如 Apache 或 Nginx)中…

排序算法 php实现

排序算法 php实现

以下是用PHP实现的常见排序算法,每种算法均附示例代码和简要说明: 冒泡排序 通过重复比较相邻元素并交换位置实现排序: function bubbleSort($arr) { $n = c…