当前位置:首页 > 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');

性能优化建议

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

文件加密 php实现

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 登录功能的关键步骤。 数据库准备 创建一个用户表存储用户信息,通常包括用户名、密码(加密存储)和其他必要…

php 实现购物车

php 实现购物车

PHP 实现购物车功能 购物车功能是电子商务网站的核心部分,可以通过 PHP 和 Session 或数据库来实现。以下是两种常见的实现方式: 使用 Session 存储购物车数据 Session 是…

php实现上传图片

php实现上传图片

上传图片的基本流程 PHP 实现图片上传功能需要处理文件接收、验证、保存等步骤。以下是具体实现方法。 创建 HTML 表单 在 HTML 中创建一个表单,设置 enctype="multipart/…

php实现登陆

php实现登陆

PHP 实现登录功能 创建登录表单 在 HTML 文件中创建一个登录表单,包含用户名和密码输入框,表单的 action 属性指向处理登录的 PHP 文件。 <form action="logi…

php 实现跳转

php 实现跳转

PHP 实现页面跳转的方法 在PHP中,实现页面跳转可以通过多种方式完成,以下是几种常用的方法: 使用header函数 header函数是PHP中最常用的跳转方法,通过发送HTTP头部信息实现跳转。…

php实现注册登录

php实现注册登录

PHP 注册功能实现 创建数据库表(以 MySQL 为例) CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, usern…