当前位置:首页 > PHP

文件加密 php实现

2026-02-16 04:24:40PHP

PHP文件加密实现方法

使用PHP内置加密函数

PHP提供openssl_encryptopenssl_decrypt函数用于文件加密解密。示例代码展示AES-256-CBC加密方式:

$method = 'AES-256-CBC';
$key = openssl_random_pseudo_bytes(32);
$iv = openssl_random_pseudo_bytes(16);

function encryptFile($inputFile, $outputFile, $key, $iv, $method) {
    $data = file_get_contents($inputFile);
    $encrypted = openssl_encrypt($data, $method, $key, 0, $iv);
    file_put_contents($outputFile, $encrypted);
}

function decryptFile($inputFile, $outputFile, $key, $iv, $method) {
    $data = file_get_contents($inputFile);
    $decrypted = openssl_decrypt($data, $method, $key, 0, $iv);
    file_put_contents($outputFile, $decrypted);
}

使用密码学扩展库

对于更高级需求可安装libsodium扩展:

$key = sodium_crypto_secretbox_keygen();
$nonce = random_bytes(SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);

function sodiumEncrypt($inputFile, $outputFile, $key, $nonce) {
    $data = file_get_contents($inputFile);
    $encrypted = sodium_crypto_secretbox($data, $nonce, $key);
    file_put_contents($outputFile, $nonce.$encrypted);
}

function sodiumDecrypt($inputFile, $outputFile, $key) {
    $data = file_get_contents($inputFile);
    $nonce = substr($data, 0, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
    $ciphertext = substr($data, SODIUM_CRYPTO_SECRETBOX_NONCEBYTES);
    $decrypted = sodium_crypto_secretbox_open($ciphertext, $nonce, $key);
    file_put_contents($outputFile, $decrypted);
}

文件哈希验证

加密后建议生成文件哈希值验证完整性:

function getFileHash($filePath) {
    return hash_file('sha256', $filePath);
}

$originalHash = getFileHash('original.txt');
$encryptedHash = getFileHash('encrypted.txt');

密钥安全管理

密钥应存储在安全位置,避免硬编码在脚本中:

// 推荐存储在环境变量或专用密钥管理服务
$key = getenv('ENCRYPTION_KEY');

性能优化建议

处理大文件时使用流式加密:

function streamEncrypt($source, $dest, $key, $iv, $method) {
    $context = stream_context_create();
    $sourceStream = fopen($source, 'r', false, $context);
    $destStream = fopen($dest, 'w', false, $context);

    while (!feof($sourceStream)) {
        $chunk = fread($sourceStream, 8192);
        $encrypted = openssl_encrypt($chunk, $method, $key, OPENSSL_RAW_DATA, $iv);
        fwrite($destStream, $encrypted);
    }

    fclose($sourceStream);
    fclose($destStream);
}

文件加密 php实现

标签: 文件加密php
分享给朋友:

相关文章

php实现分页

php实现分页

PHP实现分页的基本方法 使用原生PHP实现分页功能需要结合数据库查询和HTML展示。以下是核心实现步骤: 数据库查询与分页逻辑 // 连接数据库 $conn = new mysqli('lo…

php实现搜索功能

php实现搜索功能

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

php实现验证码

php实现验证码

PHP实现验证码的方法 使用GD库生成验证码 GD库是PHP中处理图像的扩展,可用于生成验证码图片。 <?php session_start(); $width = 120; $height…

php如何实现直播

php如何实现直播

实现直播功能的方法 PHP可以通过结合其他技术和工具来实现直播功能。以下是几种常见的方法: 使用流媒体服务器 配置流媒体服务器如Nginx-RTMP、Red5或Wowza。这些服务器支持RTMP协…

php验证码实现

php验证码实现

验证码实现方法 在PHP中实现验证码功能通常涉及生成随机字符串或数字,将其转换为图像,并通过会话(Session)进行验证。以下是几种常见的实现方式: 使用GD库生成图像验证码 GD库是PHP内置的…

php 登录实现

php 登录实现

PHP 登录实现 PHP 登录功能通常包括用户认证、会话管理和安全性措施。以下是实现 PHP 登录功能的关键步骤。 数据库准备 创建一个用户表存储用户信息,通常包括用户名、密码(加密存储)和其他必要…