gpt4 book ai didi

php - 使用 php 加密大文件的最佳方法

转载 作者:可可西里 更新时间:2023-11-01 12:55:42 28 4
gpt4 key购买 nike

我正在用 php 开发一个项目,需要对用户上传的文件进行加密。这些文件可能在 1mb 到 200mb 之间或多或少。在网上搜索后,我得出的结论是最好的方法是将文件分成 block ,例如 4096 字节。所以我加密了每个 block 并将其附加到完整的加密文件中。我实际上在 CBC 模式下使用 mcrypt 和 AES-256 加密。

所以,我的问题是:1)我必须为每个 block 创建一个新的初始向量,或者我可以将前一个 block 的最后一个 block 的最后 16 个字节作为当前 block 的第一个 block 的初始向量吗?这将导致只有一个 iv 附加到加密文件的开头,而不是每个 block 都附加一个 iv 到加密 block 之前。

2) 为了添加HMAC认证。这个问题与上一个问题相关联。我应该为整个文件添加它还是为每个 block 单独添加它。在这种情况下,对整个文件执行此操作是一个问题,因为它通常添加在文件的开头,并且在加密文件完成之前我无法计算 hmac。

3) 与此相关。对于文件下载,解密(分块)并同时将文件发送给用户是个好主意,还是先解密再发送更好?

谢谢

最佳答案

您应该加密文件流并让 PHP 处理一切。特别是encryption filters结合stream_filter_append做你想做的事。然后你只需读取明文文件的 block 并将它们写入输出文件流。过滤器导致加密发生。

这样您就不会重新发明轮子,而是使用可能已经过安全问题审计的代码。

对于 hmac,大多数库允许您不断向 hmac 添加数据,直到您调用 finalize 或类似的东西。然后你会读入大块的密文,将它们添加到 hmac。重复直到将整个密文添加到 hmac 并完成。

或者,在服务器上安装 openssl 并从 PHP 中调用 openssl 函数。您可以使用经过身份验证的密码模式等。

关于php - 使用 php 加密大文件的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16175154/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com