phpseclib/phpseclib2_compat

使用 phpseclib 3.0 构建的 phpseclib 2.0 兼容包

1.0.6 2024-02-26 14:37 UTC

This package is auto-updated.

Last update: 2024-09-21 23:11:50 UTC


README

CI Status

使用 phpseclib 3.0 构建的 phpseclib 2.0 兼容包

概览

phpseclib 3.0 与 phpseclib 2.0 不兼容。最明显的是公钥的工作方式完全不同。假设您想使用 phpseclib 3.0,而一些其他依赖项仍在使用 phpseclib 2.0,您会怎么做?

这就是 phpseclib2_compat 发挥作用的地方。需要 phpseclib/phpseclib:~3.0 和 phpseclib/phpseclib2_compat:~1.0,即使您的依赖项不知道,它们也会神奇地开始使用 phpseclib 3.0。

使用 phpseclib2_compat 实际上会给您的依赖项带来一些增强。例如,虽然 phpseclib 2.0 只支持 RSA 密钥,但 phpseclib2_compat 还支持 ECDSA / DSA / Ed25519 / Ed449 密钥。

考虑以下代码示例

use phpseclib\Crypt\RSA;

$rsa = new RSA;
$rsa->loadKey('ecdsa private key');

$ssh = new SSH2('website.com');
$ssh->login('username', $rsa);

这将在 phpseclib2_compat 中正常工作,即使使用 ECDSA 私钥,而在 phpseclib 2.0 中则不会工作。

SSH1 和 SCP 不受支持,但这些可能从来都没有被频繁使用。

使用旧的加密套件

phpseclib 3.0 使用与 2.0 不同的加密套件(一个扩展的套件)。如果这导致您遇到问题,您可以在调用 $ssh->login() 之前使用 2.0 加密套件。

$methods = [
    'crypt' => array_intersect([
        'arcfour256',
        'arcfour128',
        'aes128-ctr',
        'aes192-ctr',
        'aes256-ctr',
        'twofish128-ctr',
        'twofish192-ctr',
        'twofish256-ctr',
        'aes128-cbc',
        'aes192-cbc',
        'aes256-cbc',
        'twofish128-cbc',
        'twofish192-cbc',
        'twofish256-cbc',
        'twofish-cbc',
        'blowfish-ctr',
        'blowfish-cbc',
        '3des-ctr',
        '3des-cbc'
    ], $ssh->getSupportedEncryptionAlgorithms()),
    'mac' => [
        'hmac-sha2-256',
        'hmac-sha1-96',
        'hmac-sha1',
        'hmac-md5-96',
        'hmac-md5'
    ],
    'comp' => ['none']
];

$ssh->setPreferredAlgorithms([
    'kex' => [
        'curve25519-sha256@libssh.org',
        'diffie-hellman-group-exchange-sha256',
        'diffie-hellman-group-exchange-sha1',
        'diffie-hellman-group14-sha1',
        'diffie-hellman-group14-sha256'
    ],
    'hostkey' => [
        'rsa-sha2-256',
        'rsa-sha2-512',
        'ssh-rsa',
        'ssh-dss'
    ],
    'client_to_server' => $methods,
    'server_to_client' => $methods
]);

安装

使用 Composer

composer require phpseclib/phpseclib2_compat:~1.0