pacoorozco / openssh
创建和加载 OpenSSH 的公私钥
v0.5.1
2023-10-06 17:42 UTC
Requires
- php: ^8.1
- illuminate/support: ^8|^9|^10
- phpseclib/phpseclib: ^3.0.23
Requires (Dev)
- orchestra/testbench: ^8.12.2
- phpunit/phpunit: ^9.6.13
README
此软件包允许您轻松生成 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)。有关更多信息,请参阅 许可文件。