Я думаю, что, возможно, я что-то упускаю, но сейчас я этого не вижу. Я хочу создать простую форму, в которой пользователи могут автоматически зашифровывать сообщения между ними (форма сообщения для user2 -> encrypt (message) -> user2 получает и расшифровывает). Я использую nginx, я установил gnupg, следуя их инструкциям, и добавил его в свой php.ini (теперь он показывает, что GnuPG включен с GPGME версии 1.4.3 и расширением версии 1.3.6). Я хочу использовать определенную связку ключей, расположенную по адресу /usr/share/nginx/.gnupg
Я попробовал следующий код:
$iterator = new gnupg_keylistiterator("developer");
foreach($iterator as $fingerprint => $userid) {
echo $fingerprint." -> " . $userid . "\n";
}
var_dump($iterator);
И я просто получаю следующий ответ от var_dump:
объект (gnupg_keylistiterator) # 1 (0) {}
Может быть, мой вопрос — идиотский вопрос, но я никогда не использовал gnupg в php и хочу учиться, но со вчерашнего дня я вонючий и не понимаю, почему он не работает …
Спасибо за ваше время
Самая распространенная проблема заключается в том, что вы импортировали ключи в другой набор ключей, после чего поиск ключей производится позже. GnuPG использует для каждого (системного) пользователя «Домашний каталог GnuPG», каждый из которых содержит отдельные цепочки ключей. Если вы импортируете ключ в качестве администратора или разработчика, вы импортируете ключ в свой своя keyring, хотя обычно веб-сервер, на котором выполняется приложение PHP, выполняется в другом пользовательском контексте и не находит этот ключ, что приводит к пустому результату при перечислении ключей из PHP.
Вы можете установить это, установив переменную среды перед инициализацией привязки GnuPG.
putenv("GNUPGHOME=/tmp"); // Set GnuPG home directory to the temp folder
$res = gnupg_init(); // Initialize GnuPG
очевидно /tmp
на самом деле не является приемлемым каталогом, выберите что-то, где ваше приложение в любом случае будет хранить данные приложения. Это не должно быть каталогом, доступным через HTTP.
Как альтернатива, gnupg_import($res, $pubkey)
ключ перед его использованием (но это приведет к некоторому снижению производительности при импорте ключа).
Других решений пока нет …