如何在Laravel中加密大文件?

Empcat的成功软件包应采用Laravel设计。用户可以上传任何大小的文件。出于安全原因,必须静态加密这些文件。

Laravel提供加密,但是它们主要用于加密值。它使用加密的帮助程序方法很好地加密了小文件,例如图像,但是在此过程中,必须将文件的内容加载到内存中,这对于大文件是个问题。

我寻找了解决此问题的软件包或解决方案?找到了此Stack Overflow的答案?此PHP解决方案,它基本上是Stack Overflow中描述的解决方案的PHP。

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

我称它为FileVault软件包,您可以在GitHub上观看它。如果您想跳过本教程,可以直接转到GitHub Warehouse并开始使用此软件包。扩展包中包含详细的使用文档。

手册:

在本教程中,我将详细描述加密大文件所需的所有步骤。

首先,使用Laravel安装程序创建一个称为安全程序的新Laravel项目。

新的安全计划

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

由于我们使用了Laravel安装程序,因此我们创建了应用程序密钥并将其添加到我们的.env文件中。如果您使用其他安装方法,请不要忘记使用以下方法来创建新的应用程序密钥。

PHP工艺键:生成

由于使用Laravel Valet,我们必须为自己创建一个security-app.test域名。如果使用的是其他开发环境,则需要添加本地域名以指向新项目。

由于前杆已从Laravel 6移至Laravel UI,因此我们将安装laravel / ui扩展包。

作曲者需要卡特彼勒/ ui。开发人员:

接下来,我们将安装bootstrap ?认证雕刻。

php artisan ui bootstrap --auth:

做好一切。

npm install \\ \\ amp; npm运行开发人员:

我们还需要在.env文件中创建一个登录凭据数据库,并运行初始迁移。

PHP的工匠迁移

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

注意事项:在此显示中,我们将创建主要下载,但在您的应用程序中,您需要考虑使用较大文件的无线上传的更复杂的上传功能。

您可以使用的一个很好的扩展包是pion / laravel-chunk-upload。

Laravel Auth雕刻为我们创建了一个家庭/路线,即HomeController ? home.blade.php查看文件。

让我们编辑home.blade.php文件并将其添加到您的下载字段中。

\\ ltlt; form action =“ {{route(‘upload file‘)} method” method = method“” post“ enctype =” multipart / form-data“ class =” my-4“ \\ u0026 gt;

scsrf:

\\ ltlt; div class =“ snow-group” \\

\\ ltlt; div class =“自定义文件” \\

\\ ltlt;输入类型=“文件”类=“自定义文件输入” ID =“用户文件”名称=“用户文件” \\

\\ ltlt;标签类=“ custom-file-label” for =“ userFile” \\选择文件/标签>>

\\ ltlt; / div \\

\\ ltlt; / div \\

\\ ltlt;按钮类型=“提交”课程=“ btn btn-basic” \\上传\\ u0026 lt; /按钮

@if(会话()-\\\\具有(“消息”))

\\ ltlt; div class =“警报信号成功mt-3” \\

{{会话(“消息”))}

\\ ltlt; / div \\

@endif:

\\ ltlt; / ??

然后添加适当的路由。

在途中::帖子(\\\\ home \\ rsquo;,\\\\ u0026rsquo; [电子邮件保护] \\ u0026 rsquo;)-\\ u0026 gt;名称(\\ sup; uploadFile \\ rsquo;);

在HomeController中添加了存储方法。此方法将上载的文件保留在具有当前用户ID(存储/程序/文件/ {user-id :)”的文件目录中。

注意事项:这是错误的,不应在生产环境中使用。为了使本手册更加紧凑,我们使用文件系统来获取用户文件,但是在生产环境中,您需要使用数据库来跟踪每个用户上传的文件。

\\ u0026 lt;?的PHP:

/ **

*保存使用的上传文件

*

* @param \\\\照亮\\\\ Http \\\\ $ $查询

* @return \\\\照亮\\\\ Http \\\\响应:

* /

公共功能存储(请求$ $查询)

{

if($ query- \\ u0026 gt; hasFile(“ userFile”)\\ u0026 amp; \\ uquery- \\ u0026 gt; file(“ userFile”)-\\ u0026 gt; isValid()){

存储:: putFile(‘files /‘。Author()-\\ u0026 gt; user()-\\ u0026 gt; id,$ query- \\ u0026 gt; file(“ userFile”)));

}

返回重定向()-\\路线(“家”)-\\与(“消息,”上传结束);

}

现在该加密用户上传的文件了。我们将安装文件存档扩展包。

作曲家需要一个soarecostin /文件文件夹

该软件包允许您访问FileVault,它提供了一些加密和加密文件的方法,以及定义选项的方法,例如为每个文件设置不同的加密密钥或为文件标记Laravel文件系统。磁碟:

我们将使用FileVault ::用户加密上传文件的加密方法($ file)。此功能将删除原始未解决的文件?将其替换为同名文件?附加的.enc扩展名。

如果要重命名文件,可以将所需名称作为第二个参数传输到加密方法。如果要保存原始文件,可以使用cryptoCopy方法。

这就是我们的存储方法的样子。

\\ u0026 lt;?的PHP:

/ **

*保存使用的上传文件

*

* @param \\\\照亮\\\\ Http \\\\ $ $查询

* @return \\\\照亮\\\\ Http \\\\响应:

* /

公共功能存储(请求$ $查询)

{

if($ query- \\ u0026 gt; hasFile(“ userFile”)\\ u0026 amp; \\ uquery- \\ u0026 gt; file(“ userFile”)-\\ u0026 gt; isValid()){

$ filename =存储:: putFile(‘files /’。auth()-\\ u0026 gt; user()-\\ u0026 gt; id,$ query- \\ u0026 gt; file(“ userFile”)));

//检查我们是否上传了有效文件

如果($文件名){

FileVault ::加密($文件名);

}

}

返回重定向()-\\路线(“家”)-\\与(“消息,”上传结束);

}

接下来,我们需要查看所有用户上传的文件,并需要下载它们。

我们将在HomeController中创建一个新的下载路径和一种下载文件的新方法。

在途中::得到(\\ /文件/?????文件名} \\\\ rs00;,\\ [受邮件保护] \\\\\\ 00 \\ gt;名称(\\ s \\;下载文件\\\\ rsquo;);

\\ u0026 lt;?的PHP:

/ **

*下载文件

*

* @param string $文件名:

* @return \\\\照亮\\\\ Http \\\\响应:

* /

公共功能下载文件($文件名)

{

//主身份验证:文件将存在以检查它是否在用户目录中

if(!Storage :: has(‘files /‘。auth()-\\ u0026 gt; user()-\\ u0026 gt; id。‘/’。$ filename))){

流产(404);

}

返回response()-\\ streamDownload(使用功能()($文件名)){

FileVault :: streamDecrypt(‘files /‘。Auth()-\\ u0026 gt; user()-\\ u0026 gt; id。‘/’。$ Filename);

},Str :: changeLast(Enc。Enc``,``,$ filename)));

}

下载文件使用Laravel的本地流下载响应并获取反馈。

在反馈中,我们调用“ FileVault”应用程序提供的streamDecrypt方法,该方法将解密文件并将其提供给streamDownload方法,该方法将允许您的用户直接下载解密的文件。

现在,我们需要在下载下方显示所有用户的文件。为此,我们将$文件从HomeController索引方法修改为home.blade.php查看文件,并在下载下显示用户文件。

\\ u0026 lt;?的PHP:

/ **

*显示应用程序面板。

*

* @return \\\\照亮\\\\合同\\\\支持\\\\可呈现:

* /

公共职能指数()

{

$个文件=存储空间::文件(“文件/‘。auth()-\\ u0026 gt;用户()-\\ u0026 gt; id);

返回视图(“ home”,压缩(“ files”));

}

home.blade.php:

\\ ltlt; ul class =“列表组” \\

@forelse(将$文件作为$文件)

\\ ltlt;在类=“列表组项目” \\

\\ ltlt; a href =“ {{路由(“下载文件”,数据库($文件))}}”” \\ u0026>

database资料库($档案)}}

\\ ltlt; / a>

\\ ltlt; / li>

@empty:

\\ ltlt;在类=“列表组项目” \\您没有文件。 / li>

前言养花窍门哪里有图片价格大全喜士多(深圳湾科技生态园9栋A座-1喜士多(深圳湾科技生态园9栋A座-1:

\\ ltlt; / ul>

没错我们现在基于编码。我们为用户创建了一种上传文件,加密这些文件以及仅在用户下载文件时对其解密的方法。

当然,生产中需要采取更多的安全措施,而FileVault扩展包旨在帮助您实现这一目标。

例如,您可能要保存用户上传到Amazon S3的大文件。此扩展程序包支持文件加密/流加密。

您还可以为每个用户或每个文件的每个编码器使用不同的键,FileVault扩展框也可以使用不同的键。

资源:

您可以在GitHub创建的整个教程中找到整个Laravel程序。

如何在Laravel中加密大文件? Empcat的成功软件包应该是:JS

原文地址:https://www.cnblogs.com/blogst/p/12696054.html

时间: 2024-08-06 19:10:27

如何在Laravel中加密大文件?的相关文章

在linux/unix中查找大文件

在linux/unix中查找大文件,如查找大于100M文件的位置路径,查找等于10M文件的位置路径等等,下面就介绍几个实现快速查找的命令: 1. 查找指定目录下所有大于100M的文件,命令为 find path -type f -size +100M  (path 为自己指定的目录,如当前目录./): 2. 查找指定目录下等于10M的文件,命令为 find path -type f -size 10M (path 为自己指定的目录,如当前目录./): 3. 查找指定目录下小于1M的文件,命令为

gitlab使用过程中遇到大文件上传或下载失败的问题,总结一下

环境如下:gitlab服务器redhat,客户端环境mac os,如果是其他环境遇到问题仅供参考 如果gitlab上传代码提示: error: RPC failed; result=22, HTTP code = 411 该问题是由于客户端设置的http_post_buffer大小不足导致的,解决方法如下: 进入到工程所在的终端目录下执行: git config http.postBuffer 524288000 如果gitlab上传代码提示: error: RPC failed; result

php中读取大文件实现方法详解

php中读取大文件实现方法详解 来源:   时间:2013-09-05 19:27:01   阅读数:6186 分享到:0 [导读] 本文章来给各位同学介绍php中读取大文件实现方法详解吧,有需要了解的同学可进入参考参考.需求如下: 现有一个1G左右的日志文件,大约有500多万行, 用php返回最后几行的内容.实现方法:1 直接采用file函数 本文章来给各位同学介绍php中读取大文件实现方法详解吧,有需要了解的同学可进入参考参考. 需求如下: 现有一个1G左右的日志文件,大约有500多万行,

ASP.NET 中对大文件上传的简单处理

ASP.NET 中对大文件上传的简单处理 在 ASP.NET 开发的过程中,文件上传往往使用自带的 FileUpload 控件,可是用过的人都知道,这个控件的局限性十分大,最大的问题就在于上传大文件时让开发者尤为的头疼,而且,上传时无法方便的做到多线程的操控和上传进度的显示.笔者在此给大家推荐一款简单易用的上传组件,从而快速便捷得解决了 ASP.NET 中的大文件上传问题. 首先,我们需要下载这个名为 RanUpLoad 的组件,可以去我的百度云盘下载: http://pan.baidu.com

IIS中的大文件上传问题解决方法

IIS出于安全考虑限制了大文件的上传,而网上百度到的大部分解决方法都是用一个管理员权限的记事本打开一个文件修改参数,但是我发现里面根本没有网上所说的那些参数,最后自己找到了修改发布文件的webconfig的方法解决的IIS对大文件上传的限制. 首先在system.web中加入以下代码 [csharp] view plain copy <httpRuntime maxRequestLength="2097151"//最大上传长度 useFullyQualifiedRedirectU

记一次删除Git记录中的大文件的过程

app/test/target/ #查看大文件 git rev-list --objects --all | grep "$(git verify-pack -v .git/objects/pack/*.idx | sort -k 3 -n | tail -5 | awk '{print$1}')" #删除大文件或者目录 git filter-branch --force --index-filter 'git rm -rf --cached --ignore-unmatch app/

如何在ChemScript中创建脚本文件

ChemScript是一个化学信息学软件开发工具包(SDK),它包含的编程算法在珀金埃尔默产品中较为常见.本文将讲解如何在ChemBioOffice中的ChemScript申请创建自己的脚本文件. ChemScript的所有脚本文件范例都可以在Python和C#/.NET中获取.如果你熟悉这些语言,你会发现这些脚本很容易理解.但是如果你刚刚接触C#/.NET或Python,我们建议你参考相关的网站和书籍.ChemScript在Python和C#/.NET都可用,而在本教程中我们将使用Python

Electron中实现大文件上传和断点续传功能

Electron官网的描述:Electron是由Github开发,用HTML,CSS和JavaScript来构建跨平台桌面应用程序的一个开源库. Electron通过将Chromium和Node.js合并到同一个运行时环境中,并将其打包为Mac,Windows和Linux系统下的应用来实现这一目的. 从官网的描述我们可以简单的概括,Electron是开源的框架,可以使用h5来开发跨平台pc桌面应用,这样前端开发这可以开发桌面应用了.由于它是基于Chromium和Node.js开发的,所以在Ele

如何在 Laravel 中 “规范” 的开发验证码发送功能

什么是ThinkSNS ? ThinkSNS(简称TS),一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案,目前最新版本为ThinkSNS+(简称TS+).ThinkSNS V4.ThinkSNS[简]. 需求场景 发送「验证码」或者「消息通知」,可发送到手机或邮箱中. 完成 首先,在Laravel中的规范就是使用Laravel的「消息通知」,这里基于场景为「验证码」.这个需求几乎所有软件系统都有使用到. 创建通知场景 第一步,使用php artisan ma