关于Mike关于v2中密码短语无法正常工作的评论,这并不完全正确。如果您希望PHP文件无需手动输入PGP密码即可运行,则必须按照@ https://wiki.archlinux.org/index.php/GnuPG#Unattended_passphrase 中概述的步骤操作。
希望能帮到您。
(PECL gnupg >= 0.1)
gnupg_decrypt — 解密给定的文本
成功时,此函数返回解密后的文本。失败时,此函数返回 false
。
示例 #1 过程式 gnupg_decrypt() 示例
<?php
$res = gnupg_init();
gnupg_adddecryptkey($res,"8660281B6051D071D94B5B230549F9DC851566DC","test");
$plain = gnupg_decrypt($res,$encrypted_text);
echo $plain;
?>
示例 #2 面向对象 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);
/*
.......更多代码.......
*/
try {
$string = $gpg->decrypt($stringToDecrypt);
} catch (Exception $e) {
// 执行错误处理
}
?>
从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
希望能帮到您。