关于 Mike 关于密码在 v2 中无法正常工作的评论,这并不完全正确。如果您想让 PHP 文件在没有手动输入 PGP 密码的情况下运行,则必须按照 @ https://wiki.archlinux.org/index.php/GnuPG#Unattended_passphrase 中概述的步骤操作。
希望有帮助。
(PECL gnupg >= 0.1)
gnupg_decrypt — 解密给定的文本
使用之前使用 gnupg_adddecryptkey 设置的密钥解密给定的文本。
成功时,此函数返回解密后的文本。失败时,此函数返回 false
。
示例 #1 过程式 gnupg_decrypt() 示例
<?php
$res = gnupg_init();
gnupg_adddecryptkey($res,"8660281B6051D071D94B5B230549F9DC851566DC","test");
$plain = gnupg_decrypt($res,$encrypted_text);
echo $plain;
?>
示例 #2 OO gnupg_decrypt() 示例
<?php
$gpg = new gnupg();
$gpg->adddecryptkey("8660281B6051D071D94B5B230549F9DC851566DC","test");
$plain = $gpg->decrypt($encrypted_text);
echo $plain;
?>
关于 Mike 关于密码在 v2 中无法正常工作的评论,这并不完全正确。如果您想让 PHP 文件在没有手动输入 PGP 密码的情况下运行,则必须按照 @ https://wiki.archlinux.org/index.php/GnuPG#Unattended_passphrase 中概述的步骤操作。
希望有帮助。
如果加密了空文本,gnupg_decrypt() 函数将返回布尔值 FALSE,因此如果您进行严格比较(===,!==)以跟踪失败,它将触发失败。
对于失败,请使用异常
<?php
$gpg = new gnupg();
$gpg->seterrormode(gnupg::ERROR_EXCEPTION);
/*
.......further code.......
*/
try {
$string = $gpg->decrypt($stringToDecrypt);
} catch (Exception $e) {
// do the Error processing
}
?>
从 gnupg 版本 2 开始,不再可以传递纯密码。参数被简单地忽略。相反,如果 php 在 cli 模式下运行,将启动 pinentry 应用程序。在 cgi 或 apache 模式下,打开密钥将失败。
最简单的解决方案是使用没有密码的密钥。
关于“yougot”和“Mike”评论的更新。
我刚刚提交了一个拉取请求,应该可以解决“密码”问题,其中内部回调未被调用,从而触发了 pinentry。
拉取请求位于:https://github.com/php-gnupg/php-gnupg/pull/15
此修复程序也适用于当前的 1.4.0 版本:https://github.com/TerraTech/php-gnupg/tree/fix_adddecryptkey_passphrase-1.4.0
希望有帮助。