iis服务器助手广告
返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >浅谈Laravel中如何对大文件进行加密
  • 430
分享到

浅谈Laravel中如何对大文件进行加密

2024-04-02 19:04:59 430人浏览 泡泡鱼
摘要

我已经搜索过用于解决此问题的软件包或解决方案,并遇到了这个 Stack Overflow 回答和这个 PHP 解决方案,该解决方案基本上是 Stack Overflow 所描述的解决

我已经搜索过用于解决此问题的软件包或解决方案,并遇到了这个 Stack Overflow 回答和这个 PHP 解决方案,该解决方案基本上是 Stack Overflow 所描述的解决方案的 php 实现。

我决定创建一个为 Laravel 设计的扩展包,使用简单,优雅的语法提供简单的文件加密 / 解密功能。

在这个教程中,我会详细描述加密大文件需要的所有步骤。

首先, 使用 Laravel 安装器创建一个新的 Laravel 项目, 命名为security-app:

laravel new security-app

在撰写本教程时,我正在使用 Laravel v6.5.2。

因为我们已经使用了 Laravel 安装程序,所以我们已经生成了一个应用程序密钥并将其添加到我们的 .env 文件中。 如果您使用其他安装方法,请不要忘记使用以下方法生成新的应用程序密钥:

php artisan key:generate

因为我们正在使用 Laravel Valet,所以应该已经为我们创建了 security-app.test 域名。 如果使用其他开发环境,则应添加一个本地域名指向新项目。

由于自 Laravel 6 以来前端脚手架已被移至 Laravel UI 中,因此我们将安装 laravel/ui 扩展包。

composer require laravel/ui — dev

接下来,我们将安装bootstrap和auth脚手架:

php artisan ui bootstrap --auth

并编译所有内容:

npm install && npm run dev

我们还需要在 .env 文件中配置数据库访问凭据并运行初始迁移:

php artisan migrate

现在,我们可以创建一个新用户并登录查看用户仪表板。

注意:在本演示中,我们将创建一个基本的上传表单,但是在您的应用程序中,您应该考虑使用更复杂的上传功能,对大文件使用分块上传。

您可以使用一个非常好的扩展包是 pion/laravel-chunk-upload.

Laravel Auth 脚手架为我们创建了一个 /home 路由,一个 HomeController 和一个 home.blade.php 视图文件。

让我们编辑 home.blade.php 文件并添加一个表单和一个上传字段:


<fORM action="{{ route('uploadFile') }}" method="post" enctype="multipart/form-data" class="my-4">
    @csrf
 
    <div class="form-group">
        <div class="custom-file">
            <input type="file" class="custom-file-input" id="userFile" name="userFile">
            <label class="custom-file-label" for="userFile">Choose a file</label>
        </div>
    </div>
 
    <button type="submit" class="btn btn-primary">Upload</button>
 
    @if (session()->has('message'))
        <div class="alert alert-success mt-3">
            {{ session('message') }}
        </div>
    @endif
</form>

然后添加相应的路由:


Route::post(‘/home', ‘HomeController@store')->name(‘uploadFile');

在 HomeController 中新增 store 方法。 此方法会将上传的文件存储在具有当前用户 ID 的文件目录中 (storage/app/files/{user-id}) 。

注意:这是不正确的做法,不应在生产环境中使用。 为了使本教程更加小巧,我们使用文件系统来获取用户的文件,但是在生产环境中,需要使用数据库来跟踪每个用户上传的文件。


<?php
   
    public function store(Request $request)
    {
        if ($request->hasFile('userFile') && $request->file('userFile')->isValid()) {
            Storage::putFile('files/' . auth()->user()->id, $request->file('userFile'));
        }
 
        return redirect()->route('home')->with('message', 'Upload complete');
    }

到了加密用户上传文件的阶段。我们将安装file-vault扩展包:

composer require soarecostin/file-vault

该软件包允许访问 FileVault 门面, 其中提供了一些用于加密和解密文件的方法,还提供了一些方法来设置选项,例如为每个文件设置不同的加密密钥,或指定该文件的 Laravel 文件系统磁盘。

我们将使用 FileVault::encrypt($file) 方法来加密用户上传的文件。 此功能将删除原始的未加密文件,并将其替换为具有相同名称和附加 .enc 扩展名的文件。

如果您想使用不同的名称命名文件,则可以将所需的名称作为第二个参数传递给 encrypt 方法。 如果您想保留原始文件,可以使用 encryptCopy 方法。

这就是我们的 store 方法现在的样子:


<?php
    
    public function store(Request $request)
    {
        if ($request->hasFile('userFile') && $request->file('userFile')->isValid()) {
            $filename = Storage::putFile('files/' . auth()->user()->id, $request->file('userFile'));
 
            // Check to see if we have a valid file uploaded
            if ($filename) {
                FileVault::encrypt($filename);
            }
        }
 
        return redirect()->route('home')->with('message', 'Upload complete');
    }

接下来,我们需要查看所有用户上传的文件,还需要一种下载它们的方法。

我们将在 HomeController 中创建一个新的 downloadFile 路由和一个新的 downloadFile 方法:


Route::get(‘/files/{filename}', ‘HomeController@downloadFile')->name(‘downloadFile');

<?php
    
    public function downloadFile($filename)
    {
        // Basic validation to check if the file exists and is in the user directory
        if (!Storage::has('files/' . auth()->user()->id . '/' . $filename)) {
            abort(404);
        }
 
        return response()->streamDownload(function () use ($filename) {
            FileVault::streamDecrypt('files/' . auth()->user()->id . '/' . $filename);
        }, Str::replaceLast('.enc', '', $filename));
    }

downloadFile 使用 Laravel 原生的 streamDownload response, 接收一个回调.

在回调中,我们正在调用扩展包 FileVault 提供的 streamDecrypt 方法,它将对文件进行解密并将其逐段提供给streamDownload方法,从而允许您的用户直接下载解密文件。

现在,我们需要在上传表单下方显示所有用户的文件。 为此,我们将 $files 变量从 HomeController 的 index 方法发送到 home.blade.php 视图文件,并在上传表格的下面显示用户文件。


<?php
 
    
    public function index()
    {
        $files = Storage::files('files/' . auth()->user()->id);
 
        return view('home', compact('files'));
    }

home.blade.php


<ul class="list-group">
    @forelse ($files as $file)
        <li class="list-group-item">
            <a href="{{ route('downloadFile', basename($file)) }}" rel="external nofollow" >
                {{ basename($file) }}
            </a>
        </li>
    @empty
        <li class="list-group-item">You have no files</li>
    @endforelse
</ul>

就是这样! 我们现在在使用静态加密! 我们创建了供用户上传文件的表单,对这些文件进行加密,并且仅在上传文件的用户要求时才对其解密。

当然,在生产中,需要采取更多的安全措施,而 FileVault 扩展包旨在这方面为您提供帮助。

如,您可能希望将用户上传的大文件存储在 Amazon S3 中,该扩展包支持文件加密 / 流解密。

您可能还想为每个用户或每个文件使用不同的加密密钥,这对于 FileVault 扩展包也是可能的。

以上就是浅谈Laravel中如何对大文件进行加密的详细内容,更多关于Laravel中如何对大文件进行加密的资料请关注编程网其它相关文章!

--结束END--

本文标题: 浅谈Laravel中如何对大文件进行加密

本文链接: https://www.lsjlt.com/news/127140.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 浅谈Laravel中如何对大文件进行加密
    我已经搜索过用于解决此问题的软件包或解决方案,并遇到了这个 Stack Overflow 回答和这个 PHP 解决方案,该解决方案基本上是 Stack Overflow 所描述的解决...
    99+
    2024-04-02
  • Laravel中怎么对大文件进行加密
    小编给大家分享一下Laravel中怎么对大文件进行加密,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!我已经搜索过用于解决此问题的软件包或解决方案,并遇到了这个 Stack Overflow 回答和这个 PHP 解决方案,该...
    99+
    2023-06-15
  • 如何在spring中对配置文件进行加密
    这篇文章将为大家详细讲解有关如何在spring中对配置文件进行加密,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。通过继承spring配置类并重写处理方法实现密文解密public c...
    99+
    2023-05-30
    spring
  • 如何使用openssl对文件进行加密和解密
    这篇文章主要介绍如何使用openssl对文件进行加密和解密,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!openssl是一个安全套接字层密码库,囊括主要的密码算法、常用密钥、证书封装管理功能及实现ssl协议。Open...
    99+
    2023-06-27
  • Python怎么对文件进行加密
    本篇内容介绍了“Python怎么对文件进行加密”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Python 中的一个有用的基本加密库就叫做 c...
    99+
    2023-06-17
  • 详解Android使用Socket对大文件进行加密传输
    前言数据加密,是一门历史悠久的技术,指通过加密算法和加密密钥将明文转变为密文,而解密则是通过解密算法和解密密钥将密文恢复为明文。它的核心是密码学。数据加密目前仍是计算机系统对信息进行保护的一种最可靠的办法。它利用密码技术对信息进行加密,实现...
    99+
    2023-05-31
    android 文件加密 对大
  • 怎么对Linux系统中的文件进行加密
    这篇文章主要介绍“怎么对Linux系统中的文件进行加密”,在日常操作中,相信很多人在怎么对Linux系统中的文件进行加密问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么对Linux系统中的文件进行加密”的疑...
    99+
    2023-06-16
  • 如何在JAVA中使用MD5加密对密码进行加密
    本篇文章为大家展示了如何在JAVA中使用MD5加密对密码进行加密,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。新建Md5.javapackage com.loger.md5;import java....
    99+
    2023-05-31
    java md5加密 ava
  • Linux中如何使用age进行文件加密和解密
    这篇文章将为大家详细讲解有关Linux中如何使用age进行文件加密和解密,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。age 是一个简单的、易于使用的工具,允许你用一个密码来加密和解密文件。文件的保护和敏...
    99+
    2023-06-27
  • Win7旗舰版系统如何对efs加密的文件或文件夹进行解密
    在Win7旗舰版系统中,文件或文件夹EFS加密后,想要去加密该怎么操作呢?可以通过以下办法为使用EFS加密后的文件或文件夹进行解密。PS:小编所写过程及截图都是在Win7旗舰版系统中操作验证的。具体步骤如下:1.选中需要...
    99+
    2023-06-07
    Win7 解密 efs 系统 文件 舰版
  • 如何在Java中使用RSA加密对密码进行加密解密
    这期内容当中小编将会给大家带来有关如何在Java中使用RSA加密对密码进行加密解密,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。具体如下:public static void ...
    99+
    2023-05-31
    java rsa加密 ava
  • PHP中如何进行对称和非对称加密?
    在网络安全领域,加密技术是一种非常重要的技术手段,其可以将数据进行加密和解密,从而确保数据的安全性。PHP作为一种流行的服务器端编程语言,也提供了对称和非对称加密的支持,以满足不同应用场景的需求。对称加密对称加密是指使用相同的密钥进行加密与...
    99+
    2023-05-21
    加密算法 对称加密 非对称加密
  • dbms如何对数据进行加密
    利用dbms对数据进行加密的方法首先,在数据库中新建一个test表;drop table test;create table test(userid varchar2(50) primary key,password varcha...
    99+
    2024-04-02
  • 如何对excel数据进行md5加密
    在excel文件中使用md5加密对数据进行加密的方法首先,需要下载好md5宏插件;md5宏插件下载好后,打开并进入一个excel文件;进入excel文件后,在excel文件中,点击“工具”按钮,并在下拉列表中选择“Excel加载项”选项;在...
    99+
    2024-04-02
  • 如何在Linux中用Vim对文件进行密码保护
    小编给大家分享一下如何在Linux中用Vim对文件进行密码保护,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!Vim 是一种流行的、功能丰富的和高度可扩展的 Lin...
    99+
    2023-06-16
  • python中如何对文件进行操作
    这篇文章主要介绍python中如何对文件进行操作,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一.文件基本操作1.1 文件打开和关闭open(‘文件名称','打开模式')模式:r(只读,指针再...
    99+
    2023-06-15
  • 如何使用vbs对QWERTY密码进行加密与解密
    这篇文章主要介绍如何使用vbs对QWERTY密码进行加密与解密,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在做Arthur's Online Riddle的时候有这么一道题目: If QWERTY = AB...
    99+
    2023-06-08
  • C#如何使用SHA1算法对密码进行加密
    这篇文章给大家分享的是有关C#如何使用SHA1算法对密码进行加密的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。C#中如何使用SHA1对密码进行加密呢?在这里呢小编创建的是ASP.NET Web 项目应用程序,wi...
    99+
    2023-06-14
  • 如何在Python中对文件进行操作
    目录前言1.open()函数2.读文件3.写文件4.通过 with 来读写文件前言 在Python中,我们可以通过一些内置函数来操作电脑上的文件,并对文件进行读写,这种读写操作是很常...
    99+
    2024-04-02
  • SQLite中如何进行数据加密
    SQLite可以利用SQLCipher插件来进行数据加密。SQLCipher是一个开源的SQLite扩展,它提供了数据库级别的加密功...
    99+
    2024-03-14
    SQLite
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作