小编Tok*_*ger的帖子

如何使用 PHP 的 openssl_decrypt 函数分块解密大文件?

我正在开发一个文件存储和共享 Web 应用程序,其中 API 后端使用 Laravel,前端应用程序使用 VueJS。

我必须使用 CRON 例程每分钟启动一个 BASH 脚本来加密上传的文件,但我需要使用 Laravel/PHP 将它们从控制器解密到 StreamDownload 响应中(我需要逐块解密文件,因为大文件我们的服务器使用了太多内存)。

我们决定从外部例程对文件进行加密,以防止用户等待加密,有时在文件上传后等待几分钟。

我在 Debian 4.9 服务器上使用 Laravel 5.7 和 PHP 7.3,但我在 Windows 10 上的本地计算机上使用 WAMP 和 PHP 7.3 进行测试。我正在使用 Git Bash 来运行和测试我的 shell 命令。

我当前的 FileController 包含许多方法,包括“创建”和“下载”。

“创建”只是将文件存储到 Laravel 的存储目录中,并在数据库中创建一个新的“文件”资源,而“下载”则尝试检索加密文件,解密并将其发送到客户端。

这是我的创建方法。它只是创建资源并存储带有“.decrypted”前缀扩展名的文件。(我留了很多空白,因为这个方法的逻辑不是关于加密的)

//App\Http\Controllers\Files\FileController.php

public function create(Request $request)
    {
       ...

       $file = File::create([
            'name' => $name,
            'uuid' => $uuid,
            ...
        ]);

        ...

        $output->move($userPath, $uuid.'.decrypted');

        ...

        return new FileResource($file);
    }
Run Code Online (Sandbox Code Playgroud)

然后,这是我编写的用于每分钟加密后缀文件的 BASH 脚本(我用一些“###”替换了敏感信息,不用担心。)

#encrypt.sh

#!/bin/bash

set -euo pipefail …
Run Code Online (Sandbox Code Playgroud)

php encryption bash openssl laravel

5
推荐指数
1
解决办法
960
查看次数

标签 统计

bash ×1

encryption ×1

laravel ×1

openssl ×1

php ×1