pacoorozco/openssh

创建和加载 OpenSSH 的公私钥

v0.5.1 2023-10-06 17:42 UTC

This package is auto-updated.

Last update: 2024-09-05 19:40:05 UTC


README

Latest Version on Packagist Tests

此软件包允许您轻松生成 OpenSSH 公私钥对,可用于 SSH 连接的认证方式。

use PacoOrozco\OpenSSH\PrivateKey;
use PacoOrozco\OpenSSH\PublicKey;

// generating an OpenSSH key
$privateKey = PrivateKey::generate();
$publicKey = $privateKey->getPublicKey();

// (only RSA keys) keys can be used to encrypt/decrypt data
$data = 'my secret data';

$encryptedData = $publicKey->encrypt($data); // returns something unreadable
$decryptedData = $privateKey->decrypt($encryptedData); // returns 'my secret data'

此软件包中的大多数功能都是围绕 phpseclib 函数的包装。

安装

您可以通过 composer 安装此软件包

composer require pacoorozco/openssh

使用方法

您可以使用 generate 函数生成私钥并将其保存到文件中

use PacoOrozco\OpenSSH\PrivateKey;

$privateKey = PrivateKey::generate();
$privateKey->toFile('/home/foo/bar');

加载密钥

要从文件加载密钥,请使用 fromFile 静态方法

use PacoOrozco\OpenSSH\PrivateKey;
use PacoOrozco\OpenSSH\PublicKey;

PrivateKey::fromFile($pathToPrivateKey);
PublicKey::fromFile($pathToPublicKey);

或者,您也可以使用字符串创建密钥对象。

use PacoOrozco\OpenSSH\PrivateKey;
use PacoOrozco\OpenSSH\PublicKey;

PrivateKey::fromString($privateKeyContent);
PublicKey::fromString($publicKeyString);

在任何时候,您都可以从私钥获取公钥

use PacoOrozco\OpenSSH\PrivateKey;

$privateKey = PrivateKey::fromString($privateKeyContent);
$publicKey = $privateKey->getPublicKey();

[仅 RSA 密钥] 使用公钥加密消息,用私钥解密

以下是使用公钥加密数据和如何使用私钥解密它的方法。

use PacoOrozco\OpenSSH\PrivateKey;
use PacoOrozco\OpenSSH\PublicKey;

$data = 'my secret data';

$publicKey = PublicKey::fromFile($pathToPublicKey);
$encryptedData = $publicKey->encrypt($data); // encrypted data contains something unreadable

$privateKey = PrivateKey::fromFile($pathToPrivateKey);
$decryptedData = $privateKey->decrypt($encryptedData); // decrypted data contains 'my secret data'

如果 decrypt 无法解密给定的数据(可能使用了不匹配的公钥加密数据,或者数据已被篡改),将抛出类 \PacoOrozco\OpenSSH\Exceptions\BadDecryptionException 的异常。

确定数据是否可解密

私有密钥类有一个 canDecrypt 方法,用于确定给定的数据是否可以解密。

use PacoOrozco\OpenSSH\PrivateKey;

PrivateKey::fromFile($pathToPrivateKey)->canDecrypt($data); // returns a boolean;

签名和验证数据

私有密钥类有一个 sign 方法,用于为给定的数据生成签名。公共密钥类的 verify 方法可用于验证签名是否对给定的数据有效。

如果 verify 返回 true,则可以确定私钥的持有者已签署消息,并且该消息未被篡改。

use PacoOrozco\OpenSSH\PrivateKey;
use PacoOrozco\OpenSSH\PublicKey;

$signature = PrivateKey::fromFile($pathToPrivateKey)->sign('my message'); // returns a string

$publicKey = PublicKey::fromFile($pathToPublicKey);

$publicKey->verify('my message', $signature) // returns true;
$publicKey->verify('my modified message', $signature) // returns false;

验证输入(Laravel)

您可以使用此库验证表单输入。

要验证输入是否为有效的公钥或私钥,可以使用

use PacoOrozco\OpenSSH\Rules\PublicKeyRule;

[...]

    public function rules(): array
    {
        return [
            'public_key' => [
                new PublicKeyRule(),
            ],
            'private_key' => [
                new PrivateKeyRule(),
            ],
        ];
    }
}

测试

composer test

变更日志

有关最近更改的更多信息,请参阅 CHANGELOG

贡献

有关详细信息,请参阅 CONTRIBUTING

许可

MIT 许可证 (MIT)。有关更多信息,请参阅 许可文件