Я нашел этот ответ, и он помог мне на полпути: Как вы используете библиотека PHP OpenPGP?
Прежде всего, из-за зависимостей мне действительно не удалось правильно настроить его, просто загрузив его. Но поскольку Symfony у меня работает и установлен с помощью composer, я, наконец, установил pgp (но не работал) в Symfony, запустив composer require singpolyma/openpgp-php
, который установил его и зависимости в папку поставщика.
Я могу использовать pgp в отдельном php-файле, если мне требуется следующее, но это не работает в контроллере (даже если я добавлю требования, он не выйдет из строя больше или меньше, чем без)
require("../vendor/phpseclib/phpseclib/phpseclib/Crypt/RSA.php");
require("../vendor/phpseclib/phpseclib/phpseclib/Crypt/Hash.php");
require("../vendor/phpseclib/phpseclib/phpseclib/Math/BigInteger.php");
require("../vendor/singpolyma/openpgp-php/lib/openpgp_crypt_rsa.php");
В AbstractController Symfony это не работает. Я сломал свой мозг, какую команду я должен использовать, и у меня просто больше нет идей.
из composer.json имя
"name": "singpolyma/openpgp-php",
но минус не является допустимым именем в пространстве имен.
обычно получаю ошибку
Попытка загрузить класс OpenPGP_SecretKeyPacket из пространства имен App\Controller. Вы забыли оператор использования для другого пространства имен?
<?php
namespace App\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Doctrine\ORM\EntityManagerInterface;
class PageApiController extends AbstractController
{
/**
@Route("/ApiTest", methods={"GET"})
*/
public function ApiTest(EntityManagerInterface $entityManager)
{
$rsa = new \phpseclib\Crypt\RSA(); // HERE comes the ERROR
$k = $rsa->createKey(512);
$rsa->loadKey($k['privatekey']);
$nkey = new OpenPGP_SecretKeyPacket(array(
'n' => $rsa->modulus->toBytes(),
'e' => $rsa->publicExponent->toBytes(),
'd' => $rsa->exponent->toBytes(),
'p' => $rsa->primes[2]->toBytes(),
'q' => $rsa->primes[1]->toBytes(),
'u' => $rsa->coefficients[2]->toBytes()
));
$uid = new OpenPGP_UserIDPacket('Test <[email protected]>');
$wkey = new OpenPGP_Crypt_RSA($nkey);
$m = $wkey->sign_key_userid(array($nkey, $uid));
// Serialize private key
$Data = $m->to_bytes();
return $this->json(['Test' => $Data]);
}
}
Должен признаться, я не привык к пространствам имен в php, и я знаю, что еще не очень понимаю, что происходит в symfony. Я очень благодарен за любой намек на пространства имен в Symfony.