Мне нужно, чтобы PGP-шифрование и ASCII-доспехи представляли собой небольшую строку / токен в среде MediaWiki, используя открытый ключ, предоставленный мне третьим лицом. Это дает мне:
Я планирую использовать GnuPG lib после прочтения этого: http://devzone.zend.com/1278/using-gnupg-with-php/
Какой пользователь должен иметь открытый ключ PGP, хранящийся в своей папке .gnupg?
ОБНОВЛЕНИЕ 1
до сих пор я тестирую открытый ключ с открытым кодом (на данный момент, чтобы проверить его)
// GnuPG stuff putenv("GNUPGHOME=/tmp"); $pubkey = "-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1.2.6 (GNU/Linux) ...key... -----END PGP PUBLIC KEY BLOCK-----"; $ token="some text"; $gpg = new gnupg(); $gpg->seterrormode(gnupg::ERROR_EXCEPTION); try { $info = $gpg->import($pubkey); // var_dump($info); // to see fingerprint $info = $gpg -> addencryptkey("...fingerprint..."); $enc = $gpg -> encrypt($token); } catch (Exception $e) { echo 'ERROR: ' . $e->getMessage(); } $token = urlencode($enc); echo $token, "\n";
кажется, зашифрует, теперь мне просто нужно выяснить, нужна ли мне / может
Encrypted Data: -----BEGIN PGP MESSAGE----- Version: GnuPG v1.4.5 (GNU/Linux)
поскольку я шифрую токен для URL-адреса
Выход с поддержкой Ascii можно включить с помощью gnupg-функций PHP. Посмотрите на setarmor
.
Добавьте эту строку, возможно, лучше всего сразу после создания объекта $gpg
:
$gpg -> setarmor(1);
Но в документации говорится, что бронирование ascii будет дефолтом; какой результат вы получаете и чего вы хотите? Отправка брони ascii удобна при рассылке; иначе вы обычно выбираете меньший двоичный формат. Ни разу не было обнаружено ASCII OpenPGP с «заголовками».
К вашим меньшим вопросам:
лучше держаться подальше от exec_shell () … true?
Если он все равно отключен, на это нет решения. Пока у gnupg-функций PHP есть все необходимые функции, предпочитайте их; они избавляют вас от стычек gpg (нет прямого API, кроме инструментов командной строки). Шанс ввести любые эксплойты также меньше.
Какой пользователь должен иметь открытый ключ PGP, хранящийся в своей папке .gnupg?
Выберите произвольную папку для чтения (возможно, не перезаписываемую?) Для веб-сервера, но недоступную с помощью HTTP (так что никто не сможет получить ваши ключи). Кажется, вы уже поняли, как настроить этот путь.
кажется, зашифрует, теперь мне просто нужно выяснить, нужна ли мне / может
[Надрез]
Для этого я бы использовал некоторое регулярное выражение.
preg_match('/[\n\r]([=\n\r[:alnum:]]+)[\n\r]/', $token, $matches);
следует сделать; возможно, его более элегантным, чтобы полосать все линии или пустые или содержащие косую черту или двоеточие.
На базовом уровне попробуйте следующий код. Он не добавляет доспехи ASCII, но превращает его в удобный для просмотра (небинный) формат, который вы могли бы тривиально бронировать самостоятельно.
<?php $data = 'Secret info'; $encrypted = null; $ok = openssl_public_encrypt($data, $encrypted, $pubKey); if ($ok) { // Optionally, encode it so you can echo it onscreen $encrypted = base64_encode($encrypted); echo $encrypted . "\n"; } else { echo "Failed to encrypt\n"; }
Я не знаю, можно ли импортировать открытый ключ PGP непосредственно в OpenSSH, но этот ответ может помочь вам преобразовать форматы ключей, если вам нужно это сделать.