首页 > 解决方案 > phpseclib 2.0 在包含 autoload.php 后无法正常工作

问题描述

我正在使用 Composer,这是我第一次尝试使用 phpseclib。我找不到有关它的文档或任何 wiki,就好像没有信息一样。

我尝试在 stackoverflow 上搜索,但仍然无法正常工作。

这是我的 .php 文件:

<?php
require __DIR__ . '/../vendor/autoload.php';

$loader = new Composer\Autoload\ClassLoader();
$loader->addPsr4('phpseclib\\', __DIR__ . '/../vendor/phpseclib/');
$loader->register();

use phpseclib\Crypt\RSA;

$rsa = new Crypt_RSA();

$plaintext = 'terrafrost';

$rsa->loadKey($privatekey);
$signature = $rsa->sign($plaintext);

$rsa->loadKey($publickey);
echo $rsa->verify($plaintext, $signature) ? 'verified' : 'unverified';
?>

这是错误:[23-Mar-2020 14:04:51 UTC] PHP Fatal error: require(): Failed opening required '[23-Mar-2020 00:53:12 UTC] PHP Fatal error: Uncaught Error: Class 'Crypt_RSA' not found in /home/123/domains/asd.com/public_html/Auth/test.php:93

我需要做的就是 RSA 签名和验证。还需要能够为 RSA 生成密钥对。

如果有任何关于 phpseclib 的文档或 wiki,请告诉我。我在他们的 Github 上找不到任何东西。他们链接到这个页面Sourceforge但它是 1.0,我只能找到 2.0 的 1 个示例。这就像我见过的最糟糕的文档库。

如果有人知道更好的库,请告诉我,我使用的是这个库而不是 openssl,因为我需要 PSS 填充。

标签: phpphpseclib

解决方案


假设你正确设置了 Composer,然后试试这个:

<?php
require __DIR__ . '/vendor/autoload.php';

use phpseclib\Crypt\RSA;

$rsa = new RSA();

$plaintext = 'terrafrost';

$rsa->loadKey($privatekey);
$signature = $rsa->sign($plaintext);

$rsa->loadKey($publickey);
echo $rsa->verify($plaintext, $signature) ? 'verified' : 'unverified';
?>

与您帖子中代码的主要区别在于,它不是在做,而是在$rsa = new Crypt_RSA();$rsa = new RSA();. 它还删除了不必要的自动加载内容。毫无疑问,您从http://phpseclib.sourceforge.net/2.0.html获得了额外的代码,但该代码不包括__DIR__ . '/vendor/autoload.php'- 它包括重命名为 autoload.php的ClassLoader.php 。

如果有任何关于 phpseclib 的文档或 wiki,请告诉我。我在他们的 Github 上找不到任何东西。他们链接到这个页面 Sourceforge 但它是 1.0,我只能找到 2.0 的 1 个示例。

当您访问任何带有示例的页面时,您应该会看到一个如下所示的弹出窗口:

在此处输入图像描述

选择 2.0,然后您将看到 2.0 的示例。

这就像我见过的最糟糕的文档库。

我猜你还没有看到https://www.openssl.org/docs/哈哈。无论如何,对此有两条评论:


推荐阅读