2011-07-19 18 views
0

私は同じソフトの別のインスタンスにデータを送る前にデータを暗号化しなければならないソフトウェアを開発します(もちろん解読する必要があります)。 (xdebugのデータのチャンクがキーより大きくすることはできません暗号化するためので、私は最初にその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; 
} 

のように、openssl_public_encrypt/openssl_private_decryptを使用していますが、復号化部分があまりにも多くの時間がかかりますこれは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ライブラリにとってはまだ正しいです。私のように、GPG/PGPまたはZIP/RAR/GZ/BZ2/...暗号化データを小さな塊で賭けていると私は考えています。 完全に間違っている場合は、私の必要に応じてこれを行う方法を理解するのを手伝ってください。 –

関連する問題