Распутывание gnupg_keyinfo () вывод

Я пытаюсь записать сервер и клиентские PHP-скрипты-CLI с gpg-зашифрованными-данными с помощью gnupg_* расширений PHP на Ubuntu 18.04 и PHP-7.2.

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

Это включает использование gnupg_keyinfo () и извлечение цифрового отпечатка от комплексного массива информации.

Формат информации неясен (мне, по крайней мере!).

Сценарий сервера имеет:

    putenv('GNUPGHOME=/home/****/.gnupg');
    $gpg = gnupg_init();
    $info = gnupg_keyinfo($gpg, "username");
    $gpg_fingerprint = $info[0][0]["subkeys"]["fingerprint"];
    $reply = gnupg_adddecryptkey(gpg, $gpg_fingerprint, $gpg_passphrase);

и клиентский сценарий имеет:

putenv('GNUPGHOME=/home/****/.gnupg');
$gpg = $gnupg_init();
$info = gnupg_keyinfo($gpg, $public_key);
$gpg_fingerprint = $info[0]["fingerprint"];
$reply = gnupg_addencryptkey($gpg, $gpg_fingerprint);

Очевидно, оба, "$gpg_fingerprint =" строки являются неправильными, но каковы они должны быть?
Если цифровой отпечаток является единственной вещью, которая однозначно определяет ключ, почему это не легче к доступу?
Или есть ли более легкий способ сделать это?

0
задан 18 January 2019 в 21:08

1 ответ

Я нашел сценарий, который получает цифровой отпечаток:

$gpg = gnupg_init();
$infos = gnupg_keyinfo($gpg, $email);
$countkeys = count($infos);
if($countkeys == 0) { print "No keys match $email\n"; exit; }
// choose which key if more than 1
$keychoice = 0;
if($countkeys > 1)
{   print "$email matches $countkeys keys\n";
    for($i=0; $i<$countkeys; $i++)
    {   $name = $infos[$i]['uids'][0]['name'];
        $comment = $infos[$i]['uids'][0]['comment'];
        $timestamp = $infos[$i]['subkeys'][0]['timestamp'];
        $fingerprint = $infos[$i]['subkeys'][0]['fingerprint'];
        print "$i: $name, $comment, $timestamp, $fingerprint)."\n";
    }
    loop2:
    print "n?: ";
    $keychoice = trim(fgets(STDIN));
    if(($keychoice < 0) || ($keychoice >= $countkeys)) { print "invalid choice\n"; goto loop2; }
}
// get fingerprint 
$fingerprint = $infos[$keychoice]['subkeys'][0]['fingerprint'];
print "Fingerprint: $fingerprint\n";   

Так как цифровой отпечаток требуется для gnupg_addencryptkey (), это, казалось бы, было бы gnupg проблемой проектирования, что он прокладывается под землей далеко в 4-мерном массиве.

0
ответ дан 26 October 2019 в 12:24

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

Похожие вопросы: