PHP GnuPG - 签名消息失败

时间:2015-02-07 03:02:03

标签: php encryption gnupg gpgme

更新

  

显然,即使我认为我正在生成没有密码的密钥,gnupg仍然期望它们的密码(gnupg扩展不再支持)。我在Windows上使用Kleopatra重新生成了一个新密钥对,并绕过了所有"没有密码"警告,我能够使用这些密钥成功签名/加密。

     

因此,底线是非常确保您的密钥没有密码短语。


我正在尝试使用PHP的gnupg扩展名来签名。我正确设置了环境,并且我可以成功导入密钥,并使用gnupg_addsignkey添加密钥成功(返回true)。

当我尝试使用gnupg_sign($res, "my message")对邮件进行签名时,出现以下错误,gnupg_sign返回false:

gnupg_sign(): data signing failed

我似乎找不到任何方法来获取更详细的信息,以弄清楚它为什么会失败。

我已尝试过程序方法以及OO方法,并获得相同的结果。该权限在服务器上都是正确的。

这是我使用的OO代码:

# /tmp/.gnupg is there (but empty if that helps figure out the problem)
putenv("GNUPGHOME=/tmp/.gnupg");
$gpg = new gnupg();
$gpg->seterrormode(GNUPG_ERROR_WARNING);
$ascii = file_get_contents('/etc/my.key'); // Yes, this reads successfully

$start = strpos($ascii, '-----BEGIN PGP PRIVATE KEY BLOCK-----');
$end = strpos($ascii, '-----END PGP PRIVATE KEY BLOCK-----')+34;
$key = substr($ascii, $start, ($end-$start));

$info = $gpg->import($key); // Fingerprint is there and everything seems OK
$gpg->addsignkey($info['fingerprint']);
$signed = $gpg->sign("test!"); // fails with any string I try

$signed为false,我收到了PHP警告gnupg::sign(): data signing failed

1 个答案:

答案 0 :(得分:1)

您的私钥密码是否受到保护? 根据{{​​3}},您无法传递gnupg≥2版的明文密码。 所以你所能做的就是使用一个设置了无密码的私钥。

IMO pecl / gnupg错误很容易引起误解。