Я пытаюсь включить в сценарий PHP четкую подпись текста GPG в строке. Я могу заставить GPG зашифровать текст в такой строке:
$encrypted = shell_exec("echo '$text' | gpg -e -a -r foo@bar.com --trust-model always");
и это прекрасно работает, когда зашифрованный текст отправляется в переменную $ encrypted. Это доказывает, что GNUPGHOME и GNUPG настроены правильно.
Однако, когда я пытаюсь создать сообщение с четкой подписью таким же образом:
$text = "googar";
$signature = exec("echo $passphrase | gpg -v --clearsign --no-tty --passphrase-fd 0 '$text' 2>&1 1> /dev/null", $output);
Мне возвращается эта ошибка:
... string(51) "gpg: can't open `googar': No such file or directory"
[3]=>
string(46) "gpg: googar: clearsign failed: file open error"
}
Эта ошибка возвращается с или без одинарных кавычек вокруг переменной $ text.
Как заставить GPG или shell_exec обрабатывать $ text как конвейер вместо поиска файла?
Мне нужно повторить парольную фразу таким образом (я знаю, что она «ужасно небезопасна», поскольку GPG не может передать парольную фразу в качестве переменной в командной строке.