php - 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
- 此 .php 位于:public_html/Auth
- 自动加载位于:public_html/vendor/autoload.php
- Composer 文件夹位于:public_html/vendor/composer
我需要做的就是 RSA 签名和验证。还需要能够为 RSA 生成密钥对。
如果有任何关于 phpseclib 的文档或 wiki,请告诉我。我在他们的 Github 上找不到任何东西。他们链接到这个页面Sourceforge但它是 1.0,我只能找到 2.0 的 1 个示例。这就像我见过的最糟糕的文档库。
如果有人知道更好的库,请告诉我,我使用的是这个库而不是 openssl,因为我需要 PSS 填充。
解决方案
假设你正确设置了 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/哈哈。无论如何,对此有两条评论:
- 如果您不喜欢文档,您可以通过制作 PR 或在https://github.com/phpseclib/docs上创建问题来自己改进它
- 据我了解,对于 3.0 分支,文档正在使用https://docusaurus.io/从头开始重写
推荐阅读
- angular - jwt-decode + popper.js 在应用程序中不起作用
- python - 为什么 on_click 在 Ursina Python 中不起作用
- operating-system - 操作系统中忙等待和自旋锁的区别?
- php - 如何在使用 maatwebsite/excel 包版本 3.1 插入之前检查数据库中是否存在记录
- apache-kafka - 如何将对象存储中的 csv 数据(只能使用 url 访问)加载到 kafka 主题中,并且是否有任何时间间隔来加载每一行?
- tensorflow - Tensorflow Object-detection API:如果帧中有多个相同的对象,我如何将输出转换为语音?
- php - 如何在wordpress中动态猫头鹰轮播多行?
- java - 如何并行运行布尔类型的 CompletableFutures 并在第一个 FALSE 结果时退出或在所有任务返回 TRUE 时返回?
- php - 在 Laravel 中搜索列但显示来自另一个表列的结果
- r - 闪亮 - 转到同一页面中的另一个部分