Php OpenSSL文本最大大小?

Php OpenSSL文本最大大小?,php,encryption,openssl,php-openssl,Php,Encryption,Openssl,Php Openssl,我使用OpenSSL创建了一个基本的加密/解密类。我的目标是加密通过http发送到远程web_服务的文本(JSON)。 (是的,我知道我可以改用https,但在这种情况下不使用它有一些技术限制) 我用不同大小的文本进行了很多测试,效果很好。但是…限制在哪里 我的怀疑: text\u to\u encryptmax size的限制在哪里?在我的测试中,我让它在100Mb的文本中正常工作。对于较大的文本,我得到了http超时错误…但这是由于我当前的测试服务器限制。我知道我可以修改它,或者我可以寻找处

我使用OpenSSL创建了一个基本的加密/解密类。我的目标是加密通过http发送到远程web_服务的文本(JSON)。 (是的,我知道我可以改用https,但在这种情况下不使用它有一些技术限制)

我用不同大小的文本进行了很多测试,效果很好。但是…限制在哪里

我的怀疑:

text\u to\u encrypt
max size的限制在哪里?在我的测试中,我让它在100Mb的文本中正常工作。对于较大的文本,我得到了http超时错误…但这是由于我当前的测试服务器限制。我知道我可以修改它,或者我可以寻找处理速度更快的更强大的服务器

如果我有无限的处理能力,瓶颈在哪里?将
文本设置为\u encrypt
最大大小的限制是什么?加密/解密过程会在某个时刻失败吗?PHP会达到极限吗

我就是这样测试的:

define("_MIN_SIZE", 10000); // size of text, in bytes
define("_MAX_SIZE", 250000);    // size of text, in bytes
define("_SIZE_INCREASE", 1033); // size incresase for tests, in bytes

echo '<h2>Test encrypt/decrypt</h2>';
for($i = _MIN_SIZE; $i < _MAX_SIZE; $i = $i + _SIZE_INCREASE){
    $string = generateRandomString($i);
    $encstr = crypt::doEncrypt($string);
    if($string != ($descstr = crypt::doDecrypt($encstr) ) ){
        echo "<p style='color: red'>ERROR!".strlen($string);

    } else {
        echo "<p style='color: green'>OK ".strlen($string);

    }
    echo '</p>';
}
echo '<h2>Done!</h2>';

function generateRandomString($length = 25) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-.,_:;<>çÇ´`ñÑáÁàÀéÉèíÍìÌïÏóÓòÒúÚùÙüÜ¿?=)(/&%$·"!ªº@|¡+[]{}€';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString;
}
定义(“_MIN_SIZE”,10000);//文本大小,以字节为单位
定义(“_MAX_SIZE”,250000);//文本大小,以字节为单位
定义(“_SIZE_INCREASE”,1033);//测试的大小增量,以字节为单位
echo“测试加密/解密”;
对于($i=\u最小\u大小;$i<\u最大\u大小;$i=$i+大小\u增加){
$string=generateRandomString($i);
$encstr=crypt::doEncrypt($string);
如果($string!=($descstr=crypt::doDecrypt($encstr))){
echo“

错误!”.strlen($string); }否则{ 回声“

OK”.strlen($string); } 回声“

”; } 回音‘完成!’; 函数生成器域字符串($length=25){ $characters='0123456789ABCdEfghijklmnopqrstuvxyzabEfghijklmnopqrstuvxyz-,'uuu:'èèèèèèèèèèèèèèèèèèùèèèèèèè23; $charactersLength=strlen($characters); $randomString=''; 对于($i=0;$i<$length;$i++){ $randomString.=$characters[rand(0,$charactersLength-1)]; } 返回$randomString; }
注:我知道关于完整数据有一些缺失部分 工作流程。如注释中所述,即身份验证,seckey 和iv生成和管理等)。但为了简单起见 还没有显示问题的整个过程。我关心的是 其中是使用OpenSSL在PHP中加密字符串的大小限制


显然,您不能加密超过存储容量的文本(普通+密码)。除了内存限制之外,您认为还有什么限制?您可以通过使用逐段加密或流式加密方法来绕过内存限制。“技术限制”“因为不使用HTTPS比开发自己的真正安全的解决方案更容易解决。你的密文甚至没有经过身份验证。@James K Polk你说得对。我无法加密超过存储容量的文本。当我问自己哪一个是文本大小限制时,这是我的第一个想法。但后来我意识到,我不确定这个PHP约束(PHP可以正确管理多大的字符串?)是否是限制因素,或者是否还有其他不明显的限制因素。在代码示例中,没有实际的身份验证。无论如何,整个过程都是这样的(代码没有显示,我使用常规的WebService身份验证;但是为了简单起见,我没有在问题中显示整个过程)。我关心的是使用OpenSSL在PHP中加密字符串的大小限制在哪里。运行您自己的CA或使用Let's Encrypt。如果设置正确,这两种方法都不需要维护。归根结底,即使在这样的情况下,使TLS/SSL工作所需的努力也远远少于安全地实现您自己的加密和密钥处理所需的努力。我强烈建议你不要做你现在正在做的事情。
define("_MIN_SIZE", 10000); // size of text, in bytes
define("_MAX_SIZE", 250000);    // size of text, in bytes
define("_SIZE_INCREASE", 1033); // size incresase for tests, in bytes

echo '<h2>Test encrypt/decrypt</h2>';
for($i = _MIN_SIZE; $i < _MAX_SIZE; $i = $i + _SIZE_INCREASE){
    $string = generateRandomString($i);
    $encstr = crypt::doEncrypt($string);
    if($string != ($descstr = crypt::doDecrypt($encstr) ) ){
        echo "<p style='color: red'>ERROR!".strlen($string);

    } else {
        echo "<p style='color: green'>OK ".strlen($string);

    }
    echo '</p>';
}
echo '<h2>Done!</h2>';

function generateRandomString($length = 25) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-.,_:;<>çÇ´`ñÑáÁàÀéÉèíÍìÌïÏóÓòÒúÚùÙüÜ¿?=)(/&%$·"!ªº@|¡+[]{}€';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString;
}