我正在使用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.
我在这里缺少什么?
答案 0 :(得分:1)
谢谢主教。问题似乎是gpg 2.0.22中的一个错误,这是我在Docker中的版本。我做了一些测试,我注意到我的qa和生产服务器没有问题。我检查了那些盒子上的版本,它是2.0.28。我的代码已得到证实。