關於 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 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);
/*
.......其他程式碼.......
*/
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
希望對您有幫助。