无法使用Crypt_GPG签署文档,无法使用“无法签名数据”。没有提供密码短语。

时间:2017-12-13 03:49:25

标签: php gnupg

我正在使用Crypt_GPG for PHP,即使我正在导入一个我刚刚创建的符号密钥,我也无法签署GPG文档。

代码非常简单:

    $gpg = new \Crypt_GPG();

    // Import my private key and client public key
    $gpg->importKey($myPrivateKey);
    $gpg->importKey($clientPublicKey);

    $myPrivateFingerprint = $gpg->getKeys('my_email@example.org')[0]->getPrimaryKey()->getFingerprint();
    $clientPublicFingerprint = $gpg->getKeys('client@example.org')[0]->getPrimaryKey()->getFingerprint();

    $gpg->addSignKey($myPrivateFingerprint, 'myunittest');
    $gpg->addEncryptKey($clientPublicFingerprint);

    return $gpg->encryptAndSign('hello');

当我在返回语句之前转储Crypt_GPG类时,我可以看到符号键和密码一起存在。以下是相关部分:

 #signKeys: array:1 [
    "XXXXXXXXXXXXX" => array:2 [
      "fingerprint" => "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
      "passphrase" => "myunittest"
    ]
  ]

一切都符合要求。当我到达最后一个函数encryptAndSign()时,它失败并显示以下错误:

[Crypt_GPG_BadPassphraseException] Cannot sign data. No passphrase provided.

我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

谢谢主教。问题似乎是gpg 2.0.22中的一个错误,这是我在Docker中的版本。我做了一些测试,我注意到我的qa和生产服务器没有问题。我检查了那些盒子上的版本,它是2.0.28。我的代码已得到证实。