paragonie/easyrsa

此包已被废弃,不再维护。作者建议使用 paragonie/sodium_compat 包代替。

由 PHPSecLib 提供的简单安全的非对称加密

v0.6.0 2021-04-19 02:49 UTC

This package is auto-updated.

Last update: 2022-05-12 04:25:15 UTC


README

Build Status

简单安全的 phpseclib 包装器。

重要!

为了更好的安全,您应该使用 libsodium,而不是 EasyRSA。

动机

尽管由于指数级数法攻击的进步,RSA 的长期安全性值得怀疑(最起码),但在流行的 PHP 加密库中 RSA 的实现存在许多问题,使它今天容易受到攻击。

感谢开发 phpseclib 的人,我们可以在 PHP 中使用安全的 RSA。然而,它对普通 PHP 开发者来说不够友好,无法充分发挥其潜力。因此,我们承担起提供用户友好界面的责任。

EasyRSA 是 MIT 许可协议,由 Paragon Initiative Enterprises 的安全 PHP 开发团队提供。

如何使用此库?

composer require paragonie/easyrsa

生成 RSA 密钥对

您可以使用 EasyRSA 生成 2048 位密钥(或更大)。默认大小为 2048。

<?php
use ParagonIE\EasyRSA\KeyPair;

$keyPair = KeyPair::generateKeyPair(4096);

$secretKey = $keyPair->getPrivateKey();
$publicKey = $keyPair->getPublicKey();

获取原始密钥

<?php
/** @var \ParagonIE\EasyRSA\PublicKey $publicKey */
var_dump($publicKey->getKey());

加密/解密消息

<?php
use ParagonIE\EasyRSA\EasyRSA;

$message = "test";
/** @var \ParagonIE\EasyRSA\PublicKey $publicKey */
/** @var \ParagonIE\EasyRSA\PrivateKey $secretKey */

$ciphertext = EasyRSA::encrypt($message, $publicKey);

$plaintext = EasyRSA::decrypt($ciphertext, $secretKey);

签名/验证消息

<?php
use ParagonIE\EasyRSA\EasyRSA;

$message = "test";
/** @var \ParagonIE\EasyRSA\PublicKey $publicKey */
/** @var \ParagonIE\EasyRSA\PrivateKey $secretKey */

$signature = EasyRSA::sign($message, $secretKey);

if (EasyRSA::verify($message, $signature, $publicKey)) {
    // Signature is valid!
}

兼容性

EasyRSA 只与自身兼容。它不与 OpenGPG(GnuPG、Mailvelope 等)兼容。您需要使用 GPG-Mailer

它内部是如何工作的?

  • 加密(KEM+DEM)
    • 生成一个随机秘密值
    • 使用 PHPSecLib(RSAES-OAEP + MGF1-SHA256)用您的 RSA 公钥加密随机秘密值
    • 使用 HMAC-SHA256 从秘密值及其 RSA 加密的密文派生出加密密钥
    • 使用 defuse/php-encryption(身份验证对称密钥加密)加密您的明文消息
    • 计算加密值(和版本标签)的校验和
  • 身份验证
    • 使用 PHPSecLib(RSASS-PSS + MGF1-SHA256)签名消息

支持合同

如果贵公司在其产品或服务中使用这个库,您可能对从Paragon Initiative Enterprises购买支持合同感兴趣。点击此处购买支持合同