phpseclib SSH2 зависает на Math_BigInteger::modPow()

Я пробовал базовый пример SSH2, но он зависает.

<?php
ini_set('display_errors', 1);

include('Net/SSH2.php');
$host = '192.168.100.101';
$ssh = new Net_SSH2($host);

Если я установлю ограничение по времени, например, 1000 секунд:

<?php
ini_set('display_errors', 1);
set_time_limit(1000);

include('Net/SSH2.php');
$host = '192.168.100.101';
$ssh = new Net_SSH2($host);

я бы получил:

Fatal error: Maximum execution time of 1000 seconds exceeded in /path/to/Math/BigInteger.php on line 1060
Stack trace:
#  Time      Memory  Function                           Location
1  0.0014    647704  {main}( )                          ../index.php:0
2  0.0219    2203280 Net_SSH2->Net_SSH2( )              ../index.php:14
3  0.1114    4439056 Net_SSH2->_key_exchange( )         ../SSH2.php:952
4  0.1837    4520224 Math_BigInteger->modPow( )         ../SSH2.php:1309
5  0.1840    4521888 Math_BigInteger->_slidingWindow( ) ../BigInteger.php:1723
6  0.1842    4523144 Math_BigInteger->_prepareReduce( ) ../BigInteger.php:1817
7  0.1842    4523144 Math_BigInteger->_reduce( )        ../BigInteger.php:1912
8  0.1842    4523144 Math_BigInteger->_barrett( )       ../BigInteger.php:1876
9  0.1844    4536024 Math_BigInteger->divide( )         ../BigInteger.php:2032
10 1001.4549 4577384 Math_BigInteger->subtract( )       ../BigInteger.php:1497
11 1001.4549 4586584 Math_BigInteger->_subtract( )      ../BigInteger.php:991

У кого-нибудь есть идеи, что вызвало это?

Заранее спасибо.

Дополнительная информация: я использую PHP 5.3.28 как модуль Apache 2.2.10 на Linux x86_64.


person greatmorro    schedule 12.05.2014    source источник
comment
Похоже на бесконечный цикл, возможно, в ваших ключах есть числа, которые больше, чем ожидалось phpseclib. Если вы скомпилировали PHP с --with-openssl, вам лучше использовать эти функции.   -  person Daniel W.    schedule 12.05.2014


Ответы (1)


Вы используете самый медленный режим phpseclib, так что это не поможет. Но, это сказал...

Попробуйте последнюю версию git. В частности, этот коммит должен привести к небольшому ускорению:

https://github.com/phpseclib/phpseclib/commit/e4ff01f05475e81a56681ebfdb5473a07099e5ea

person neubert    schedule 12.05.2014
comment
Это была версия 0.3.6, которая была последней здесь: phpseclib.sourceforge.net. Во всяком случае, последняя версия git, о которой вы сказали, работает нормально. Спасибо. - person greatmorro; 13.05.2014