swissmakers/php-openssh

允许您生成4096位RSA私钥/公钥对,可用于身份验证方法,以及用于加密/解密字符串。

v1.0 2024-06-20 12:40 UTC

README

此库允许您生成4096位OpenSSH私钥/公钥对,可用于SSH身份验证和加密/解密字符串。

use Swissmakers\OpenSSH\PrivateKey;
use Swissmakers\OpenSSH\PublicKey;

// Generate a new OpenSSH key pair
$privateKey = PrivateKey::generate();
$publicKey = $privateKey->getPublicKey();

// Encrypt and decrypt data using the key pair
$data = 'my secret data';
$encryptedData = $publicKey->encrypt($data); // Returns unreadable data
$decryptedData = $privateKey->decrypt($encryptedData); // Returns 'my secret data' in plaintext

安装

使用Composer安装此包

composer require swissmakers/php-openssh

使用方法

生成私钥并将其保存到文件中

use Swissmakers\OpenSSH\PrivateKey;

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

加载密钥

从文件加载密钥

use Swissmakers\OpenSSH\PrivateKey;
use Swissmakers\OpenSSH\PublicKey;

$privateKey = PrivateKey::fromFile($pathToPrivateKey);
$publicKey = PublicKey::fromFile($pathToPublicKey);

从字符串加载密钥

use Swissmakers\OpenSSH\PrivateKey;
use Swissmakers\OpenSSH\PublicKey;

$privateKey = PrivateKey::fromString($privateKeyContent);
$publicKey = PublicKey::fromString($publicKeyContent);

从私钥获取公钥

use Swissmakers\OpenSSH\PrivateKey;

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

加密和解密数据

使用公钥加密数据,并用私钥解密

use Swissmakers\OpenSSH\PrivateKey;
use Swissmakers\OpenSSH\PublicKey;

$data = 'my secret data';

$publicKey = PublicKey::fromFile($pathToPublicKey);
$encryptedData = $publicKey->encrypt($data);

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

如果解密失败,将抛出\Swissmakers\OpenSSH\Exceptions\BadDecryptionException异常。

检查解密能力

确定数据是否可以用私钥解密

use Swissmakers\OpenSSH\PrivateKey;

$privateKey = PrivateKey::fromFile($pathToPrivateKey);
$canDecrypt = $privateKey->canDecrypt($data); // Returns a boolean

签名和验证数据

使用私钥签名数据,并用公钥验证

use Swissmakers\OpenSSH\PrivateKey;
use Swissmakers\OpenSSH\PublicKey;

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

$publicKey = PublicKey::fromFile($pathToPublicKey);
$isVerified = $publicKey->verify('my message', $signature); // Returns true
$isModifiedVerified = $publicKey->verify('my modified message', $signature); // Returns false

验证输入(Laravel)

验证表单输入,检查有效的公钥或私钥

use Swissmakers\OpenSSH\Rules\PublicKeyRule;
use Swissmakers\OpenSSH\Rules\PrivateKeyRule;

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

测试

使用以下命令运行测试

composer test

许可证

GNU通用公共许可证v3.0。有关更多信息,请参阅许可证文件