You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中gnupg_sign带密码短语签名失败问题求助

带密码短语的GnuPG密钥无法签名问题排查

我正在测试HSBC沙箱,发送数据前需要对载荷进行加密和签名。HSBC为沙箱提供了预生成密钥,我拥有:

  • 客户端私钥
  • 客户端公钥
  • HSBC公钥
    以及密码短语1password

我的机器上运行着GnuPG 2.2.19,已通过PHP的gnupg_import导入全部3个密钥。执行gnupg_keyinfo后得到如下密钥信息(已修改隐私相关信息):

Array
(
    [0] => Array
        (
            [disabled] => 
            [expired] => 
            [revoked] => 
            [is_secret] => 
            [can_sign] => 1
            [can_encrypt] => 1
            [uids] => Array
                (
                    [0] => Array
                        (
                            [name] => Client Payment Notification
                            [comment] => 
                            [email] => tomw@client.co.uk
                            [uid] => Client_ Payment Notification 
                            [revoked] => 
                            [invalid] => 
                        )

                )

            [subkeys] => Array
                (
                    [0] => Array
                        (
                            [fingerprint] => 70A91F261D23DDDE77CB52BE61BE8D97497C9424
                            [keyid] => 61BE8D97497C9424
                            [timestamp] => 1675936132
                            [expires] => 0
                            [is_secret] => 
                            [invalid] => 
                            [can_encrypt] => 
                            [can_sign] => 1
                            [disabled] => 
                            [expired] => 
                            [revoked] => 
                        )

                    [1] => Array
                        (
                            [fingerprint] => 34CA88A208742E3DAB6850040C1088250E620B25
                            [keyid] => 0C1088250E620B25
                            [timestamp] => 1675936132
                            [expires] => 0
                            [is_secret] => 
                            [invalid] => 
                            [can_encrypt] => 1
                            [can_sign] => 
                            [disabled] => 
                            [expired] => 
                            [revoked] => 
                        )

                )

        )

    [1] => Array
        (
            [disabled] => 
            [expired] => 
            [revoked] => 
            [is_secret] => 
            [can_sign] => 1
            [can_encrypt] => 1
            [uids] => Array
                (
                    [0] => Array
                        (
                            [name] => HSBC-Sandbox-Public
                            [comment] => 
                            [email] => help@mail.develop.hsbc.com
                            [uid] => HSBC-Sandbox-Public 
                            [revoked] => 
                            [invalid] => 
                        )

                )

            [subkeys] => Array
                (
                    [0] => Array
                        (
                            [fingerprint] => 37518BFC71C9B490C9980F489E459E50958DA76C
                            [keyid] => 9E459E50958DA76C
                            [timestamp] => 1668584185
                            [expires] => 0
                            [is_secret] => 
                            [invalid] => 
                            [can_encrypt] => 
                            [can_sign] => 1
                            [disabled] => 
                            [expired] => 
                            [revoked] => 
                        )

                    [1] => Array
                        (
                            [fingerprint] => 0F973BB7DBF26B8EA2A05299251305CBA700420A
                            [keyid] => 251305CBA700420A
                            [timestamp] => 1668584185
                            [expires] => 0
                            [is_secret] => 
                            [invalid] => 
                            [can_encrypt] => 1
                            [can_sign] => 
                            [disabled] => 
                            [expired] => 
                            [revoked] => 
                        )

                )

        )

我可以使用HSBC公钥成功加密消息,代码如下:

$res = gnupg_init();
gnupg_addencryptkey($res,"0F973BB7DBF26B8EA2A05299251305CBA700420A");
$enc = gnupg_encrypt($res, "just a test");
echo $enc;

输出结果为:

-----BEGIN PGP MESSAGE----- hQGMAyUTBcunAEIKAQv/VhNCgR5GQU/xYxYF5dzLh5s2oegX4ARZ0pg6PeXREsva FXh/W4hkJFb4jSdLCDSY8eerzII7AyIDrsuasG25tsfAZ1FVJhs0y5TPEqSNpLuV CG0nt9s0CFiJUWyF3gwYipE73OaMbHJxYGZy1zQLpLd4L92rhaUS2pC6Xq1SLydp hz/CWoROwxpuGekaaVX015EeFhaCeZa0K/yleTP05dbBJPaYKwi/4z5QVBMlpYwf K/nDkq8b0HG+RF6+T99GzXldp7wxBPSIY65Ft5iC9cL9vTcEFnHtiglyXziwBgNV KMLYyaf8iH2AYKLwLd31XRswHAf+E6PLMRwqoDJg639h8G8oNvYJrGJf77e95FI/ LdAzwb8SpOTAadgfysLxK0pkRgFFRxAC0ykbjjDNJVPiOqw7GfEiM4hNvnFhvmNX elfYjQCLCeDakZFKVobkkQYDyUybci1ItFvIN5fqgwIzLF+CBqUvcnpROqGkbONR hc30VqDYX1B2aMLABHGB0kYBTUzkcQl3q6nNxCYj6ib3g/6Rk8u6y++4FKQYuO3Q TbPMF7Rl4UKAGMywQEYXiWOUoEFAD49vVisYfuIk01wBfgmd/ZHu =J+Ry -----END PGP MESSAGE-----

但签名操作始终失败。我尝试使用gnupg_encryptsign,代码如下:

$res = gnupg_init();
gnupg_addencryptkey($res,"0F973BB7DBF26B8EA2A05299251305CBA700420A"); // HSBC 公钥
gnupg_addsignkey($res,"70A91F261D23DDDE77CB52BE61BE8D97497C9424", "1password"); // 客户端私钥
$enc = gnupg_encryptsign($res, "Tom Test");
echo $enc;

echo "<h1>Errors</h1>";
print_r(gnupg_geterror($res));

得到错误:encrypt-sign failed

于是我尝试单独签名,不进行加密,代码如下:

$res = gnupg_init();
gnupg_addsignkey($res,"70A91F261D23DDDE77CB52BE61BE8D97497C9424", "1password"); // 客户端私钥
$signed = gnupg_sign($res, "just a test");
echo $signed;
echo "<h1>Errors</h1>";
print_r(gnupg_geterror($res));

得到错误:data signing failed

为排查问题,我还进行了以下尝试:

  • 留空密码短语尝试签名 - 失败
  • 创建新密钥对,密码短语设为test后尝试签名 - 失败
  • 创建无密码短语的密钥对并尝试签名 - 成功

请问为何使用带密码短语的密钥时始终无法完成签名?

内容的提问来源于stack exchange,提问作者Tomwwud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 17:11:16