当前位置:首页 > PHP

php实现扩展加密解密

2026-02-28 00:44:35PHP

PHP 扩展加密解密实现方法

在 PHP 中实现加密解密功能可以通过多种方式完成,包括内置函数、第三方库或自定义扩展。以下是几种常见的方法:

使用 OpenSSL 扩展

PHP 的 OpenSSL 扩展提供了强大的加密解密功能,支持多种算法如 AES、DES、RSA 等。

// AES-256-CBC 加密
function encrypt($data, $key) {
    $iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
    $encrypted = openssl_encrypt($data, 'aes-256-cbc', $key, 0, $iv);
    return base64_encode($encrypted . '::' . $iv);
}

// AES-256-CBC 解密
function decrypt($data, $key) {
    list($encrypted_data, $iv) = explode('::', base64_decode($data), 2);
    return openssl_decrypt($encrypted_data, 'aes-256-cbc', $key, 0, $iv);
}

使用 Sodium 扩展

PHP 7.2+ 内置了 Sodium 扩展,提供了现代加密算法如 ChaCha20-Poly1305。

// Sodium 加密
function sodiumEncrypt($message, $key) {
    $nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
    $cipher = sodium_crypto_secretbox($message, $nonce, $key);
    return base64_encode($nonce . $cipher);
}

// Sodium 解密
function sodiumDecrypt($encrypted, $key) {
    $decoded = base64_decode($encrypted);
    $nonce = substr($decoded, 0, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
    $cipher = substr($decoded, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
    return sodium_crypto_secretbox_open($cipher, $nonce, $key);
}

使用 Libsodium 扩展

对于 PHP 7.2 以下版本,可以通过 PECL 安装 Libsodium 扩展。

php实现扩展加密解密

// 安装命令
pecl install libsodium

使用 Mcrypt 扩展(已弃用)

虽然 Mcrypt 扩展在 PHP 7.1 后被弃用,但在旧版本中仍可使用。

// Mcrypt 加密
function mcryptEncrypt($data, $key) {
    $iv = mcrypt_create_iv(mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC), MCRYPT_RAND);
    $encrypted = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $data, MCRYPT_MODE_CBC, $iv);
    return base64_encode($encrypted . '::' . $iv);
}

// Mcrypt 解密
function mcryptDecrypt($data, $key) {
    list($encrypted_data, $iv) = explode('::', base64_decode($data), 2);
    return mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key, $encrypted_data, MCRYPT_MODE_CBC, $iv);
}

自定义加密扩展

如果需要更高性能或特殊算法,可以编写 PHP 扩展。以下是简单示例:

php实现扩展加密解密

  1. 创建扩展骨架

    php ext_skel.php --ext=mycrypto
  2. 实现加密函数

    PHP_FUNCTION(mycrypto_encrypt) {
     char *data;
     size_t data_len;
     char *key;
     size_t key_len;
    
     if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss", &data, &data_len, &key, &key_len) == FAILURE) {
         RETURN_NULL();
     }
    
     // 实现加密逻辑
     // ...
    }
  3. 注册函数

    const zend_function_entry mycrypto_functions[] = {
     PHP_FE(mycrypto_encrypt, NULL)
     PHP_FE_END
    };

注意事项

  • 始终使用安全的随机数生成器(如 random_bytes
  • 对密钥和 IV 进行安全存储
  • 考虑使用 PHP 的 hash_equals 进行安全比较
  • 避免使用已弃用的加密函数(如 Mcrypt)
  • 对于密码存储,使用 password_hashpassword_verify

以上方法可以根据具体需求选择,现代 PHP 应用中推荐使用 OpenSSL 或 Sodium 扩展。

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

相关文章

php实现搜索功能

php实现搜索功能

实现基本的搜索功能 在PHP中实现搜索功能通常涉及数据库查询。以下是一个简单的实现方式,假设使用MySQL数据库: <?php // 连接数据库 $conn = new mysqli('loc…

git php实现

git php实现

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

php 路由实现

php 路由实现

PHP 路由实现方法 在 PHP 中实现路由功能有多种方式,以下是几种常见的实现方法: 使用原生 PHP 实现 通过解析 URL 并匹配对应的控制器和动作: $request = $_SERV…

php实现异步

php实现异步

PHP 实现异步的方法 PHP 本身是同步执行的脚本语言,但可以通过以下方法模拟异步操作或实现异步效果: 使用多进程(pcntl_fork) 通过 pcntl_fork 创建子进程实现异步,适用于…

php实现即时通讯

php实现即时通讯

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

php 实现类

php 实现类

PHP 类的基本实现 在 PHP 中,类通过 class 关键字定义,后跟类名和一对花括号。类名通常遵循大驼峰命名法(如 ClassName)。以下是基本语法: class ClassName {…