我试图使用AES加密PHP中的(大)文件,并且已经研究过使用Mcrypt和OpenSSL,问题是到目前为止我发现的所有解决方案只加密字符串,而文件我是&m;尝试加密会触发PHP的最大内存限制(遗憾的是不能设置得更高),我将如何实现这一目标?
答案 0 :(得分:3)
您可以使用Mcrypt使用CBC加密,然后一次加密一段数据。确保该段是所用密码的块大小的x倍(例如AES的16个字节)。加密段并获取生成的密文的最后一个块,并将其用作下一个段的IV。最后一段应该是PKCS#7填充(包含在mcrypt_encrypt
评论中的大量例子)。
通过将段链接在一起,您可以获得与单个加密无法区分的密文(使用此信息测试您的代码)。解密是相同的,使用密文作为IV。要了解它是如何工作的,请查看CBC加密方法:
编辑:如果可能,您应该使用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协议加密。
至于存储文件的加密版本,我不建议。