使用OpenSSL我已经创建了一个基本的加密/解密类。我的目标是加密通过http发送到远程web_service或从远程web_service发送的文本(JSON)。 (是的,我知道我可以使用https代替,但是在这种情况下不会使用它的某些技术限制)
class Crypt {
static private $default_method = "aes-256-cbc";
public static function doEncrypt($text_to_encrypt) {
// ...some preparation stuff here
$result = base64_encode(openssl_encrypt($text_to_encrypt, self::$default_method, $seckey, OPENSSL_RAW_DATA, $iv));
return $result;
}
public static function doDecrypt($encrypted_text) {
// ...some preparation stuff here
$result = openssl_decrypt(base64_decode($encrypted_text), self::$default_method, $seckey, OPENSSL_RAW_DATA, $iv);
return $result;
}
}
我使用不同大小的文本进行了许多测试,并且工作正常。但是......限制在哪里?
我怀疑:
text_to_encrypt
最大尺寸的限制在哪里?在我的测试中,我使用高达100Mb的文本正常工作。随着更大的文本我得到http超时错误...但这是由于我当前的测试服务器限制。我知道我可以修改它,或者我可以寻找更强大的服务器来处理更快。
如果我有无限的处理能力,瓶颈会在哪里?什么会设置text_to_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;
}
注意:我知道有关完整数据的一些缺失部分 流程。即验证,如评论中所指出的,seckey 和iv生成和管理等)。但为了简单起见,我 没有在问题中显示整个过程。我关心的是 使用OpenSSL在PHP中加密字符串的大小限制在哪里。