PHP gnupg enrypt работает, но не расшифровывает

Я собираюсь использовать gnupg для шифрования и дешифрования файлов. Странно то, что шифрование работает нормально, но расшифровка всегда возвращает ложь.

Вот простой скрипт php, шифрующий и дешифрующий контент:

$content = 'test text';
putenv("GNUPGHOME=/PATH_TO_GPG_PATH");
$gpg = new gnupg();
$gpg->addencryptkey("FINGERPRINT");
$enc = $gpg->encrypt($content);

var_dump($enc);

$gpgD = new gnupg();
$gpgD->adddecryptkey("FINGERPRINT","PASSPHRASE");
$plain = $gpgD->decrypt($enc);
var_dump($plain);

Версии

Пакеты Debian

gpgv 1.4.18-7

libgpgme11: amd64 1.5.1-6

PECL

Состояние пакета версии gnupg 1.4.0 стабильный

Версия PHP: PHP 7.1.11-1 + 0 ~ 20171027135825.10 + jessie ~ 1.gbp2e638d

Кто-нибудь уже сталкивался с этой проблемой? У меня нет идей. Заранее спасибо.

2 ответа

Вы пробовали вызывать gnupg_geterror() после gnupg_adddecryptkey()? Я подозреваю, что ваш закрытый ключ на самом деле не принимается. Я предполагаю, что это должно быть в кольце ключей GPG пользователя PHP? Кроме того, в нескольких коротких тестах, которые я выполнял, меня постоянно спрашивали о парольной фразе на терминале, но это могло быть из-за моего paranoid gpg config (я полностью отключаю кэширование парольной фразы).

Другой способ отловить ошибки - установить gnupg_seterrormode() в ERROR_EXCEPTION или похоже, чтобы увидеть, что на самом деле происходит...

Для меня проблема заключалась в том, что у приложения PHP не было прав доступа к ключевым файлам. Если вы сгенерируете ключи с помощью cli «gpg» (как я сделал), это сделает файлы принадлежащими «root». Поэтому мне просто нужно было изменить их, чтобы они принадлежали пользователю приложения php.

Папки, для которых мне нужно было обновить разрешения, были {GNUPGHOME}/openpgp-revocs.d и {GNUPGHOME}/private-keys-v1.d.

Я предполагаю, что для вас это папка /private-keys-v1.d, поскольку вы не можете ее расшифровать.

Другие вопросы по тегам