2017-02-01 16 views
0

Я делаю небольшую программу, часть которой должна расшифровывать сообщения gpg, которые передаются между двумя ПК. К сожалению, Perl GnuPG библиотека возвращает:Perl GnuPG возвращает NO_SECKEY даже с указанным паролем

GnuPG::abort_gnupg(GnuPG=HASH(0x1ddba80), "Protocol error: expected NEED_PASSPHRASE.* got NO_SECKEY\x{a}")

, когда я запускаю этот код:

#!/usr/bin/perl 
use strict; 
use warnings; 
use GnuPG; 

my ($gpg, $msg, $dec, $pwd, $tfile); 

$gpg = new GnuPG (gnupg_path => "/usr/bin/gpg",); 
$pwd = "pwd";  # 
$msg = "message"; # 
$tfile = "/tmp/local_scripts/temp.txt"; 

chomp $msg; 
open (my $fh, ">", $tfile) or die "Cannot open temporary file: $!"; 
print $fh $msg; 
close ($fh); 

$gpg->decrypt 
(
    symmetric => 1, 
    ciphertext => $tfile, 
    passphrase => $pwd, 
    output => $dec, 
); 

print $dec; 

Am Я даже используя правильную библиотеку, чтобы сделать это, или я должен обратиться к Crypto :: GnuPG (который при тестировании дал мне «Дешифрование не удалось: не удалось найти секретный ключ для дешифрования сообщения», даже с указанным паролем ...) Я потерялся действительно

ответ

1

Появляется, что для его запуска, вы должны полностью указать расположение родителя GnuPG, файл опций & gpg_path wh enever вы вызываете конструктор GnuPG:

$gpg = new GnuPG (gnupg_path => "/usr/bin/gpg", homedir => "/home/your_username/.gnupg/", options => "/home/your_username/.gnupg/gpg.conf");

(испытано на Debian 8)