Я пытаюсь расшифровать файл gpg с помощью закрытого ключа, используя функции php GnuPG. Но, пытаясь расшифровать его, похоже, что php просто висит или навсегда заканчивается. Я пытаюсь расшифровать простой тестовый файл с одним предложением.php GnuPG decrypt times out
Я могу дешифровать файл в автономном режиме (например, с помощью GNU Privacy Assistant).
Я думаю, что я настроил разрешение okay-
-bash-4,1 $ gpgconf --list-каталоги
/home/jdoe/.gnupg/gpg.conf, завивка : 0770
/home/jdoe/.gnupg/pubring.gpg, перманент: 0770
/home/jdoe/.gnupg/secring.gpg, завивка: 0660
/home/jdoe/.gnupg/private-keys -v1.d, perms: 0700
/home/jdoe/.gnupg/ra ndom_seed, перманент: 0600
/home/jdoe/.gnupg/pubring.gpg, завивка: 0770
/home/jdoe/.gnupg/trustdb.gpg, завивка: 0770
Но, если Я пишу новый файл в «/home/jdoe/.gnupg/», он имеет 644 разрешения (не уверен, если это имеет значение).
/home/jdoe/.gnupg/xxxtest.txt.gpg, перманент: 0644
Я (думаю) я успешно импортировал закрытого ключа. Ниже приведена KeyInfo. Соответствующий ключ имеет отпечаток пальца и идентификатор ключа с 888 (я заменил их фактические значения на 888). Я включаю все ключи в случае, если это релевантно (я заменил не относящуюся к делу отпечаток пальца/ключевую информацию с помощью 777).
$ info = $ gpg-> keyinfo (''); echo 'Ключевые данные:'. print_r ($ info, true);
Array ([0] => Array ([отключено] => [с истекшим сроком] => [отозвана] => [is_secret] => [can_sign] => 1 [can_encrypt] => 1 [UIDs] => Array ([0] => Array ([name] => ApacheTest [комментарий] => Тестирование [email] => apache @ localhost [uid] => ApacheTest (Тестирование) [отменено] => [недействительно] =>)) [subkeys] => Array ([0] => Array ([fingerprint] => 777 [keyid] => 777 [timestamp] => 1203433839 [expires] => 0 [is_secret] => [invalid] => [can_encrypt] => [can_sign] => 1 [disabled] => [expired] => [revoked] =>) [1] => Array ([fingerprint] => 777 [keyid] => 777 [timestamp] = > 1203433840 [expires] => 0 [is_secret] => [invalid] => [can_encrypt] => 1 [can_sign] => [disabled] => [expired] => [revoked] =>))) [1] => Array ([disabled] => [expired] => [revoked] => [is_secret] => [can_sign] => 1 [can_encrypt] => 1 [uids] => Array ([0] => Массив ([name] => John Doe [комментарий] => [email] => [email protected] [uid] => John Doe [отменено] => [invalid] =>)) [subkeys] => Array ([0] => Array ([fingerprint] => 888 [keyid] => 888 [timestamp] = > 1224013510 [expires] => 0 [is_secret] => [invalid] => [can_encrypt] => [can_sign] => 1 [disabled] => [expired] => [revoked] =>) [1] => Массив ([отпечаток пальца] => 777 [keyid] => 777 [timestamp] => 1224013510 [expires] => 0 [is_secret] => [недействительный] => [can_encrypt] => 1 [can_sign] => [disabled] => [истекло] => [отозвана] =>))))
Моя проблема, при попытке расшифровать с кодом ниже, он выглядит как PHP просто висит или принимая навсегда, чтобы закончить (превышение чем max_execution_time в реальности, но не показывает сообщение об ошибке).
$gpg = new gnupg();
$gpg->seterrormode(gnupg::ERROR_EXCEPTION);
putenv("GNUPGHOME=/home/jdoe/.gnupg");
$encryptedContent = file_get_contents($filePathAndName);
$pw = [];
$fingerprint = [];
if($gpg->adddecryptkey($recipient, $pw)) {
echo "Add decrypt key returned true.";
} else {
echo "Could not add decrypt key. GPG error: " . $gpg -> geterror();
}
//I know we get to this spot
try {
$plaintext = $gpg->decrypt($encryptedContent);
echo '<pre>' . $plaintext . '</pre>';
} catch (Exception $e) {
die('ERROR: ' . $e->getMessage());
}
Любые идеи о том, почему это не работает? Спасибо.
============== Выход из Ls -LA /home/jdoe/.gnupg
drwxrwx --- 3 JDoe апаша 4096 31 Mar 23: 45.
drwxr-хт-х 19 JDoe корень 12288 1 апреля 9:39 ..
-rwxrwx --- 1 JDoe апаша 9188 28 марта 15:36 gpg.conf
drwx ------ 2 апач апач 4096 Mar 31 21:26 private-keys-v1.d
-rwxrwx --- 1 apache apache 2479 Mar 31 21:26 pubring.gpg
-rwxrwx --- 1 apache apache 913 31 марта 20:28 pubring.gpg ~
-rw ------- 1 апач апач 600 31 марта 20:32 RANDOM_SEED
-rw-RW ---- 1 JDoe апаша 1978 28 марта 21:05 secring.gpg
-rwxrwx-- - 1 apache apache 10 Mar 31 20:28 test.txt
-rwxrwx --- 1 j Самка апач 1200 31 марта 20:28 trustdb.gpg
-rw-р - r-- 1 апач апач 347 31 марта 23:30 xxxtest.txt.gpg
Вы можете расшифровать файл с помощью команды и сколько времени это займет?
вернусь к вам с этой информацией (работа с SA на это, у меня есть только FTP доступа к машине).
Попробуйте увеличить отчетность об ошибках PHP?
Уже сделано ... это просто раскручивает (который я предполагаю, что означает, что он раз вне, из exit_on_timeout выключен). Я пробовал это с 10-минутным и 30-секундным таймаутом. Результат тот же. Дешифрование тестового файла составляет менее 100 символов.
Вы можете попробовать не устанавливать домашний каталог, но импортировать ключ с помощью импорта ($ keydata)
Тот же результат
Пробовал установив другой домашний каталог?
Я создал /home/jdoe/.gnupg/temp, CHMOD права доступа 777. Я установить это в качестве домашнего каталога для GPG. Я попытался импортировать закрытый ключ. Но $ gpg-> keyinfo ('') ничего не возвращает. На этот раз при попытке $ gpg-> adddecryptkey он не справляется с этой ошибкой - «Исключить исключение« Исключение »с сообщением« get_key failed ».
Благодаря
Пожалуйста, добавьте вывод 'ls -la/home/jdoe/.gnupg'. Можете ли вы расшифровать файл из командной строки и сколько времени потребуется? Вы пытались увеличить отчетность об ошибках PHP? –
Я добавил эту информацию выше. Очень признателен. –
GnuPG _might_ не нравится права на запись группы. Возможно, вы захотите попробовать не устанавливать домашний каталог, а импортировать ключ, используя ['import ($ keydata)'] (http://www.php.net/manual/en/function.gnupg-import.php) для каталог веб-сервера GnuPG, или создать тот, который у него есть, и имеет только права доступа для этого пользователя. Что является результатом $ gpg-> adddecryptkey ($ fingerprint, $ pw); '? Я не думаю, что эта функция выдает сообщение об ошибке, но возвращает ошибки «false». –