问题标签 [phpseclib3]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
83 浏览

php - 使用 phpseclib3 从 Azure B2C 密钥生成公钥

从 Azure B2C 模数和指数生成公钥的大多数示例都使用 phpseclib 并将 XML 字符串传递到库以生成公钥。

但是,phpseclib3 似乎通过提供一个 PublicKeyLoader 来切换这一点,它采用一个键控数组,其中键是 e 和 n 的指数和模数作为 BigInteger 实例。

需要对 Azure B2C 提供的 e 和 n 值进行哪些转换以使其适合与 PublicKeyLoader 一起使用?

旧版本的 phpseclib 的许多示例将从 base64url 转换为 base64,但我不知道这是否纯粹是为了 XML 转换方法的好处,以及这是否适用于 BigInteger 函数。

生成此公钥的目的是通过 lcobucci/jwt 验证访问令牌签名。

0 投票
1 回答
176 浏览

php - 无法使用 phpseclib 创建 Crypt_RSA 实例

我正在尝试使用我需要与之交互的供应商提供给我的模数和指数来加密一串数据。我的研究使我找到了 phpseclib 库,以使这很容易做到。

我使用 composer ( php composer.phar require phpseclib/phpseclib:~3.0 )安装了最新版本的 phpseclib (3.0)并将其放在 PHP 包含路径 ( /var/Classes ) 中已经存在的目录下。

我阅读的所有文档以及如何执行此操作的示例都产生了如下所示的代码。但是,在尝试创建 Crypt_RSA 实例时,简单测试在第 5 行失败。

完整的错误信息是:

致命错误:未捕获的错误:在 test.php:5 中找不到类“Crypt_RSA”

SO 上和其他地方都有许多资源描述了实现此目的的各种方法,但它们似乎都不是 phpseclib 3.0 版兼容/相关的。

0 投票
0 回答
267 浏览

php - PHP 使用 RSA/ECB/OAEPWithSHA-1AndMGF1Padding 加密

一直在尝试使用 php 中的公钥加密 64 字节的数据字符串,但无论我尝试什么,结果都被接收者拒绝。我一直在使用phpseclib,

但没有运气。当我通过这个网站https://www.devglan.com/online-tools/rsa-encryption-decryption进行操作时,输出字符串有效。那么有谁知道如何做到这一点?任何帮助都非常感谢。

0 投票
1 回答
245 浏览

php - 本地主机上的 PHPSeclib 公钥认证成功;部署失败

我创建了一个脚本,该脚本使用phpseclib扩展名连接到服务器,使用公钥认证(如您在此处看到的),通过使用ssh-keygen.

我现在面临的是,当我从本地主机运行 php 脚本时,连接工作得很好,但是当我从服务器运行脚本时,我总是尝试登录失败,并报告以下错误:

SSH_MSG_USERAUTH_FAILURE

(我$sftp->getLastError()在尝试后使用时得到$sftp->login())。

知道为什么会这样吗????

更新

认为这可能是由于与 file_get_contents() 相关的一些错误,所以我检查了它,它确实是键的值。我也直接将私钥粘贴到 PublicKeyLoader::load() 函数中,发生了同样的错误,所以这不是原因。

我认为发生问题的主要日志事件是,当运行完全相同的脚本试图建立与目标服务器的连接时:

从本地主机(工作):

从服务器(不工作):

我生成了三个密钥对,使用它们运行了 localhost 和服务器-客户端测试,我总是得到上面显示的内容。当我回显它时,我肯定得到了密钥,不用担心它不是加密的 OpenSSH 私钥,这不是原因(不支持phpseclib),然后在 localhost 上也会失败(我已经测试)。

所以看起来它在服务器上的公钥认证步骤上失败了,尽管我使用的是完全相同的脚本,虽然我在回显检索到的密钥时得到了完全正确的密钥,但也在服务器端.

然后,我检查了如果我更改密钥的单个字符会发生什么;如果这重现了上面显示的 SSH - 日志,但没有。如果我这样做,脚本会在记录任何内容之前中断,抛出phpseclib3\Exception\NoKeyLoadedException: Unable to read key异常。

由此我得出结论,唯一的问题可能是密钥在发送到服务器之前以某种错误的方式编码,并且服务器因此误解了密钥。

考虑到这一点,我发现phpseclib需要paragonie根据this的包,以及做一些 base64 编码的phpseclibs依赖项之一。paragonie因此,我认为用于发送密钥的编码可能由于某种原因未正确完成,并检查了phpseclib扩展程序是如何安装在服务器上的(由服务器管理员完成,而不是由我完成)。

原来它是一个 plesk 服务器,它要求你以一种有点不寻常的方式上传新的作曲家包,即通过composer.json文件,根据这个。我只通过命令提示符、直接在服务器上通过 SSH 或在服务器上部署的本地环境安装了 composer 包。这两项工作都没有,上面的说明也不起作用。

然后我检查了composer.json文件,发现它的内容是:

该文件已经包含一个扩展名,我们无法触摸,但我们需要添加phpseclib. 为此,该行"phpseclib/phpseclib": "^3.0"只是简单地添加到requireJSON 的 key 中,但我觉得这不是正确的方法。恕我直言,这种解释phpseclib为已使用包的依赖项,它们彼此完全独立。

我现在开始认为,这可能是脚本在服务器端运行时失败的最后一个原因:就其依赖项而言,包没有正确安装,因此依赖项phpseclib本身需要没有正确使用,因为phpseclib包本身被列为依赖项。因此,某些缺少 base64 编码或类似的(包paragonie的依赖项phpseclib,见上文)可能会导致问题。这可能吗?消除这个原因;我需要知道如何composer.json在 plesk 服务器上通过 composer via 正确安装扩展,而无需触及以前以这种方式安装的包。关于如何做到这一点的任何想法?我还为此发布了一个单独的问题,以获取更多详细信息;你可以检查一下

也可能导致问题的是当前composer.json文件需要一个低于 atm 所需的 php 版本phpseclib(php:> = 5.6.1)。但同样,要改变这一点,我需要知道如何以composer.json正确的方式修改文件。

更新

我已经composer.json通过将其内容从 plesk 服务器复制到我下载作曲家的本地环境来更新文件。然后我通过命令提示符安装phpseclib包,然后将结果复制composer.json回 Plesk 服务器。而且我再次遇到完全相同的问题(除了与composer.json以前相同的内容)。帮助..?

0 投票
0 回答
87 浏览

php - phpseclib 使用 nlist() 函数时不显示来自 SFTP 的目录内容,但会引发 LengthException

我正在使用 phpseclib3 v3.0.11 来与 SFTP 交互。登录完美,我也可以毫无问题地更改目录,我也可以直接下载文件并且它可以工作。

唯一不起作用的是带有nlist()or的目录列表rawlist(),我需要它循环目录中的所有文件才能下载它们,因为我事先不知道文件名。

错误堆栈跟踪是:

我的代码很简单:

这是$ftp->getSFTPLog()chdir 命令后的输出:

请问你能帮帮我吗?我正在使用 php 7.2 我真的不明白问题出在哪里,并且在谷歌上搜索这个错误到目前为止我还没有发现任何有用的东西。

0 投票
1 回答
74 浏览

phpseclib - 解密 - PHPSECLIB

我正在尝试使用 phpseclib 解密字符串。

我的散列字符串是从名为jsencrypt的 javascript 库生成的。加密结果保存在数据库中。

之后我使用 phpseclib3 尝试使用以下方法解密字符串:

但是当我运行代码时,出现以下错误:

我也试过openssl_decrypt用没有运气的方式解密字符串:

有谁知道我可以如何解密散列字符串?

0 投票
1 回答
132 浏览

php - “类名必须是有效对象或字符串”在没有 Composer 的情况下安装 PHPSecLib

我正在尝试使用 PHPSecLib 进行 RSA 加密,手动安装(即不使用 Composer)。

我正在按照我在这里找到的这些手动安装说明进行操作: https ://davescripts.com/manual-installation-of-phpseclib

并尝试做我在这里找到的这个例子: How to Decrypt RSA OAEP with SHA256 using openssl on PHP

到目前为止我采取的步骤:

  1. 在此处访问了 GitHub 存储库:https ://github.com/phpseclib/phpseclib/tree/3.0

  2. 在“代码”下选择“下载 ZIP”。

  3. 在本地解压缩文件并将整个 'phpseclib' 目录上传到服务器。

  4. 创建了一个测试脚本,并对使其工作所需的多层包含和使用进行了故障排除。

  5. 但是,目前,我收到一个新错误 - “类名必须是有效的对象或字符串”,我不理解并且似乎无法解决。

我的测试脚本现在如下:

但是,当我尝试运行此 PHP 代码时,我收到以下输出,这让我卡住了:

如果有帮助,请注意测试脚本位于单独的目录中,如下所示:

PHP 版本是 7.0.33,如果这有什么不同的话。

我真的很想弄清楚如何让 PHPSecLib 工作。如果有人可以帮助我弄清楚发生了什么,那就太棒了。

0 投票
0 回答
33 浏览

phpseclib - 使用 phpseclib 解密 mcrypt rijndael-256 加密数据

我们有一些看起来像这样的遗留代码:

我知道需要删除此遗留代码(mcrypt已弃用)并且需要确定我是否可以使用mcrypt 以外的其他方式解密数据......或者我们是否需要找到一种方法将数据迁移到另一个加密方案完全提前拆除mcrypt

是否有等效的 PHPSecLib(或其他?)代码可以解密mcrypt此处加密的内容?

我已经尝试过了,但没有得到有效的结果: