0

我开发了一个软件,它必须先加密数据才能将其发送到同一软件的另一个实例(当然必须解密它)。我首先使用openssl_public_encrypt / openssl_private_decrypt,像这样

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 服务器上,它们必须加密。

谢谢,
塞德里克

4

1 回答 1

0

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

至于“数据必须小于密钥”仅适用于一次性填充的情况。现代密码本质上总是具有小于被加密数据的密钥......想想一个大的 RAR 或 ZIP 文件 - 数兆字节的数据,但一个只有几个字符大小的密钥(密码)。

于 2011-07-19T15:52:33.480 回答