PHP或C中的压缩和加密

PHP或C中的压缩和加密,php,c++,encryption,Php,C++,Encryption,给定一个10M字节的流,我需要对它进行压缩(gzip或其他)和加密(Rijndael-128),然后将其存储在磁盘上。在某些情况下,还需要反向操作 这是主要用PHP开发的web应用程序的一部分。我已经用PHP写了几行了。然而,我在想,用C编写这个组件并从PHP调用它是否会更好。执行时间不是最相关的方面,但内存使用和CPU负载是最相关的 基于此,是否值得将原始ByTestStream写入磁盘,然后在其上运行C/C++程序进行压缩和加密 确保如果它是一个流,则将其作为一个流处理,并将资源(RAM)的

给定一个10M字节的流,我需要对它进行压缩(gzip或其他)和加密(Rijndael-128),然后将其存储在磁盘上。在某些情况下,还需要反向操作

这是主要用PHP开发的web应用程序的一部分。我已经用PHP写了几行了。然而,我在想,用C编写这个组件并从PHP调用它是否会更好。执行时间不是最相关的方面,但内存使用和CPU负载是最相关的

基于此,是否值得将原始ByTestStream写入磁盘,然后在其上运行C/C++程序进行压缩和加密

确保如果它是一个流,则将其作为一个流处理,并将资源(RAM)的使用保持在最低限度,即不要将该流作为一个大字节数组处理。尝试调整缓冲区大小

如果速度不够快,请使用C和AES-NI CPU指令编写用于流式处理的PHP库。您可以使用PHP中已经部署了AES-NI的OpenSSL函数。Bothan也可以使用,它是一个C++库,它集中在流支持上,并且如果可以使用,也使用AES-NI。
无论您做什么,都不要将中间明文写入磁盘,这既不安全,也会引入不必要的I/O(+OS访问)瓶颈。

为什么不先尝试几行
mcrypt
,看看是否有问题?我希望设计师在测试时会考虑到资源消耗!我已经用PHP实现了它,它运行得很好。然而,在未来,许多这样的操作将被同时请求,并且服务器资源有些有限(2GB的RAM和双核CPU)。不过,永久存储速度很快,是服务器级SSD。在其上从
ab
运行负载测试,查看其性能。或者,从web应用程序中删除加密并使其成为脱机过程。Mcrypt已经用C编写,因此我怀疑从C调用加密库不会给您带来任何好处(出于安全原因,除非您是一名完全的专家,否则您不应该自己编写)。用较低级别的语言构建此组件将花费相当多的时间。我认为有人已经遇到了类似的问题,因为对于特定任务是否应该使用编译好的C而不是PHP有很多问题。@user3359858:PHP gzip和mcrypt函数是用C实现的,因此,它应该可以相当快地解决问题:)请注意,mcrypt源代码似乎已经很长一段时间没有维护,并且似乎不支持AES-NI。我将把这对PHP mcrypt功能的安全性意味着什么留给您(如果一开始就存在这种情况的话)。我使用CBC模式AES对16KB和32KB的区块加密(16字节长的IV大小的倍数)进行了一些测试。它比一次加密所有文件慢一点(小于10%),但内存使用是可预测的,而且非常低。但是,压缩很难通过对块而不是整个文件进行压缩来实现。有没有办法不用压缩块长度构建一种映射呢?现在我想起来了,以32KB的块读取流并进行压缩(加密之前),同时构建一个压缩块长度的数组,对于一个10MB的文件,这意味着每个4字节的320个整数,大约是1.25kb。我可以在不破坏性能的情况下将其写入另一个文件。