2011-07-19 61 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/...由小塊墓穴數據,和我一樣。 如果我完全錯了,請幫我理解如何根據我的需要來做到這一點。 –