2011-07-19 64 views
0

数据我开发具有隐窝数据之前将其发送到相同的软(有解密它当然)的另一个实例软件。我先用openssl_public_encrypt/openssl_private_decrypt,像地穴大量的PHP

foreach(str_split($sData, MAXSIZE) as $sChunk) 
{ 
    if(! @openssl_public_encrypt($sChunk, $crypted, $sPublicKey)) throw new Exception('openssl_public_encrypt'); 
    $aCrypted[] = $crypted; 
} 

$sResult = ''; 
foreach($aCrypted['data'] as $ct => $sChunkCrypted) 
{ 
    if(! openssl_private_decrypt($sChunkCrypted, $sChunk, $sPrivateKey)) throw new Exception("decrypt"); 
    $sResult .= $sChunk; 
} 

由于数据块加密不能比的关键较大,但解密部分花费太多时间(Xdebug的告诉我,这是对openssl_private_decrypt()的调用,它需要所有的时间)。

我尝试与对称算法mcrypt_decrypt/MCRYPT_RIJNDAEL_256(与OpenSSL的隐窝的关键),但它更糟糕。我能做些什么以安全的方式传输大量数据?文件是CSV(文本)并放在SSH/SFTP服务器上,它们必须被加密。

感谢,
塞德里克

+1

为什么不使用[SCP(http://php.net/manual/en/function.ssh2-scp-send.php)? –

+0

因为我需要隐藏数据,即使服务器之间的副本是安全的,并且SFTP的安全性也不比SCP低。对? –

+0

当然,SFTP也很好。如果您需要加密存储的数据,为什么不在文件系统级别执行?如果性能是一个问题,这应该比任何你可以用PHP编写的任何东西都快。如果这听起来像你想探索的东西,看看[eCryptfs](https://launchpad.net/ecryptfs)。 –

回答

0

只需使用SCP或SFTP。他们会将SSL用于实际的数据传输,因此您将自动获得加密内容。如果您需要以隐藏状态存储文件,则必须使用mcrypt及其朋友为您执行加密。

至于“数据有可能比重点小”只适用于一次性垫的情况。现代密码本质上总是具有比被加密的数据更小的密钥......想象一个大的RAR或ZIP文件 - 数兆字节的数据,但是只有几个字符的密钥(密码)。

+0

SCP/SFTP用于转移,但如果存储服务器受到损害,则必须加密数据。 Mcrypt比非对称密钥慢(但我可能会误用它)。而且“数据必须小于关键字”对于PHP使用的openssl库仍然是正确的。 EXEC()并不总是在我的客户的服务器可获取的,我敢打赌GPG/PGP或ZIP/RAR/GZ/BZ2/...由小块墓穴数据,和我一样。 如果我完全错了,请帮我理解如何根据我的需要来做到这一点。 –