2012-01-08 32 views
2

我正在编写一个用于以加密形式存储文件的web应用程序,但稍后可以在非php环境中进行解密。因此,假设用户上传了一个名为doc.pdf的文件。 然后它以加密形式加密并存储在服务器上。然后用户可以稍后下载加密的文件并在他/她的系统上对其进行解密。在PHP中执行外部程序的有效方法?

因为使用php的mcrypt扩展加密的文件是不可移植的,所以我决定用c编写一个名为“encrypt”的程序。然后,我调用它在PHP:现在

$return_var=exec("encrypt $file_path $key"); 

,我认为的另一种方法是创建一个加密的服务器基本上是与周围聆听通过套接字请求的能力的加密程序的包装。所以我们可以说php脚本现在会向这个程序发出一个请求,提供一个文件名和要加密的密钥。

我认为这可能是一种更灵活的方法,因为通过将加密服务器程序放在另一台计算机上,可以轻松调整加密过程的负载。

现在,我的问题是两种方法中的哪一种方法是有效的(就速度而言,处理大量客户等)?

+1

如果您可以将传入的数据流式传输到执行加密的某些内容,然后直接将其写入磁盘,那么它真的会得到回报。处理文件就好像它是一个批处理过程一样,效率要低得多,因为你必须将数据加载到内存中X次,甚至可能从磁盘加载(这也可能是不安全的)。 – 2012-01-08 13:57:36

回答

1

大部分加密过程将用于执行对称加密,例如, AES。 AES - 和大多数密码密码 - 相对较快。您有很多机会等待I/O而不是加密部分。为此创建一个服务器应用程序几乎肯定是矫枉过正。如果真的需要,我会先选择本地应用程序,然后再恢复到基本优化。

+0

我同意你的看法,但让我的主服务器上说,Web服务器和数据库服务器都在运行,然后在同一台服务器上执行加密可能会增加负载。所以使用服务器应用程序会更好吗?任何方式I/O都可以通过使用高速连接来在服务器端进行优化。我错了吗 ? btw thanx输入 – tnx1991 2012-01-08 14:01:46

+0

我同意@owlstead。可能这将是用PHP编写这个程序然后将你的应用程序集群化的最佳解决方案。(即:迁移到云) – Kaii 2012-01-08 14:10:32

+0

@Kail是的,集中PHP应用程序(如果需要,也是一样)也是我的解决方案。为什么我要制作专用服务器的唯一原因是架构或安全目的(将密钥安全和可访问性降至最低),而不是出于性能原因。但是我会先开始工作(创建一些CLI工具),然后美化它并从那里开始工作。 – 2012-01-08 14:36:22

0

如果你在PHP中执行加密而不执行导致非常大开销的外部程序,它可能会更好。

窥视mcrypt扩展:

http://de2.php.net/manual/en/mcrypt.examples.php

和只写结果字符串到目标文件。

+0

我最初想到了它,甚至实现了它。但是,当使用c程序解密文件时,它只是无法工作。我搜索了很多,发现使用php mcrypt的扩展加密是不可移植的。 – tnx1991 2012-01-08 14:05:45

+0

它是可移植的 - 最有可能在加密和解密时使用不兼容的密码。当你正确地获得所有的密码参数时,你可以用其他语言加密数据。实际上,mcrypt只是C函数的一个包装。 – Kaii 2012-01-08 14:08:34

+0

那么,如果你这么说,我会再次通过我的实施。 thanx – tnx1991 2012-01-08 14:17:20

0

我只想对文档的原因只是ZIP /压缩文件,用密码,并保持该密码保存以供用户下载等

这样,用户就不需要对他们到底有什么解密工具并且加密/ zip保护已经为您完成。

我意识不到你在问什么,但我会这样做,为了不重新发明轮子,仍然实现相同的结果,受保护的文件。

+0

其实我的要求有点复杂,我必须使用多种加密算法,这些加密算法可能因文件而异。此外,系统不应仅限于文件。 – tnx1991 2012-01-08 14:08:27