PHP ASCII бронированная PGP зашифрованная строка

Мне нужно, чтобы PGP-шифрование и ASCII-доспехи представляли собой небольшую строку / токен в среде MediaWiki, используя открытый ключ, предоставленный мне третьим лицом. Это дает мне:

  • нужно использовать PHP
  • лучше держаться подальше от exec_shell () … true?
  • веб-серверная среда

Я планирую использовать 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-адреса

Related of "PHP ASCII бронированная PGP зашифрованная строка"

Выход с поддержкой 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, но этот ответ может помочь вам преобразовать форматы ключей, если вам нужно это сделать.