使用openSSL在PHP中加密(大)文件

时间:2015-06-09 20:39:19

标签: php file encryption aes php-openssl

我试图使用AES加密PHP中的(大)文件,并且已经研究过使用Mcrypt和OpenSSL,问题是到目前为止我发现的所有解决方案只加密字符串,而文件我是&m;尝试加密会触发PHP的最大内存限制(遗憾的是不能设置得更高),我将如何实现这一目标?

4 个答案:

答案 0 :(得分:3)

您可以使用Mcrypt使用CBC加密,然后一次加密一段数据。确保该段是所用密码的块大小的x倍(例如AES的16个字节)。加密段并获取生成的密文的最后一个块,并将其用作下一个段的IV。最后一段应该是PKCS#7填充(包含在mcrypt_encrypt评论中的大量例子)。

通过将段链接在一起,您可以获得与单个加密无法区分的密文(使用此信息测试您的代码)。解密是相同的,使用密文作为IV。要了解它是如何工作的,请查看CBC加密方法:

enter image description here

编辑:如果可能,您应该使用OpenSSL等效功能。这没有(很好)记录,但你应该能够使用the code found in the link within the comment that Scott mentioned做同样的事情。请注意,您应首先执行所有操作而不使用填充,然后使用填充 执行最后一段

答案 1 :(得分:1)

http://jeremycook.ca/2011/03/20/easy-file-encryption/

{{1}}

不要使用太多内存,你需要一个流密码。用反引号“

在PHP中调用它

或使用shell_exec

修改

由于shell exec不可用

http://php.net/manual/en/filters.encryption.php

那里有一个解决方案。虽然我不能强调这一点。流密码很难我没有完全查看代码,我认为我没有能力。直接使用开放式SSL是一个更好的选择

{{3}}

是示例代码

答案 2 :(得分:0)

我发布了两个函数,使用 AES-128-CBC 算法在openssl_encrypt()的帮助下加密和解密大文件。

请参阅此openssl_encrypt()

答案 3 :(得分:-3)

在您的网站上使用SSL会为您处理。传输的任何文件都由客户端浏览器加密,服务器使用HTTPS协议加密。

至于存储文件的加密版本,我不建议。