Я использую phpseclib для входа на SFTP-сервер с использованием закрытого ключа RSA. Я обновляю phpseclib 1.0 на PHP 5.3 до phpseclib 2.0.12 на PHP 7.2. Старый код на PHP5 работает просто отлично, но обновленная версия не может войти в систему, что приводит к следующему сообщению об ошибке: 1024 Соединение преждевременно закрыто в SSH2.php в строке 3939. Вот две разные версии:
СТАРЫЙ phpseclib1.0 на PHP5.3 КОД (работает):
$key = new Crypt_RSA();
$key->loadKey(file_get_contents('rsaprivate.key'));
$sftp = new Net_SFTP('urltosftpserver');
$sftp->login('username', $key)
НОВЫЙ phpseclib 2.0.12 на КОДЕ PHP7.2 (сбой):
$key = new phpseclib\Crypt\RSA();
$key->loadKey(file_get_contents(__DIR__.'/rsaprivate.key'));
$sftp = new phpseclib\Net\SFTP('urltosftpserver');
$sftp->_privatekey_login("username", $key);
Когда я смотрю на значение $ key, они не совпадают в двух разных версиях моего кода. phpseclib1.0 создает целые числа для значения, а phpseclib2.0 создает шестнадцатеричные числа. Когда я конвертирую шестнадцатеричные числа pubseclib 2.0 в целые числа, они не совпадают с целыми числами, созданными pubseclib 1.0. Но я не уверен, что это как-то связано с моей проблемой.
SNIPPLET FROM pubseclib1.0 var_dump ($ key):
[value] => 42318...
[is_negative] =>
[generator] => mt_rand
[precision] => -1
[bitmask] =>
[hex] =>
SNIPPLET FROM pubseclib2.0 var_dump ($ key):
[value] => 0x60f23...
[engine] => bcmath (OpenSSL)
Я не знаю, что именно ключ RSA вызывает проблему или метод _privatekey_login.