如何在Laravel中加密大文件?
Posted blogcccc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在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
以上是关于如何在Laravel中加密大文件?的主要内容,如果未能解决你的问题,请参考以下文章