我的程式應該使用 GnuPG 加密檔案,但我無法使其作業。我試過直接在服務器上使用命令加密檔案,并且有效。但是當我運行我的 PHP 代碼時,檔案沒有加密。我試過加密單個字串,但仍然失敗。介意幫忙嗎?
<? php
putenv("GNUPGHOME=/home/admin/.gnupg");
$gpg=new gnupg();
$gpg->addencryptkey("CB416DC6B06BF75D1C8DA888A552533206"); //fingerprint
$enc=$gpg->encrypt("hi");
echo $enc;
?>
我已經運行了 geterror,它回傳“沒有加密集的密鑰”。我可以知道我是否正確設定了 homedir 以及 GnuPG homedir 的確切權限是什么?
先感謝您!
uj5u.com熱心網友回復:
確保您的語法正確并且您使用的指紋實際上可用。
檢查您是否擁有鑰匙
$ gpg --list-keys
/home/jaroslav/.gnupg/pubring.kbx
---------------------------------
pub rsa3072 2021-10-20 [SC] [expires: 2023-10-20]
C1CFDC84CA8A42DBF03371E75B9ED4CB2025188B
uid [ultimate] Jaroslav Rakhmatoullin <[email protected]>
sub rsa3072 2021-10-20 [E] [expires: 2023-10-20]
運行示例
$ php gpg.php
-----BEGIN PGP MESSAGE-----
hQGMAxqCDajFlhqQAQv8DwOnlRKYLBmlS5ItBcPPhz9lV7sBqHRdkzmpNF1fC0NE
uH/6A160IYJ24nA8e5CbnsFReEoohiC03wM4hfGmPQJ0K73aE8jsJU9UyoL8CK b
l9WubvMK2a4/gHoD837y8U6L72mXvyKvvxW35h7CXLUHOb5R9iNkUBS4YyFbO05p
OETjMwN1nb9s2h/Z/IdKx8YOPieub RoVs6WijE9BnsAeHRgG7QyrQ97a xn3/lG
a0g/h65jFGYj0ocQgKANORwlfUEurZ 8tad5c0d M5y JZTDsYecKS1lNAQAu0tE
FTp hbef3Tsec4mG7oJt4tXGxunr D1hu31lqmo/nhzqIBPiPdVJuMX2vEwBZnYX
GP1c7k8tyhoRWdvKuU9aBoADiPSPY90EppXUBma9Y X6bOPjsdHM3wxDLQIw7Xir
WByNb6/pxB8efe8nETSwIxcqyr Lut4eBIk5lk0pnWf3goCawnENrLhsWOGhtN/x
S9wqI 9kC2LO y3qcQkF0j0Bgq/5hQUWyQwN7mLmDvn3hUuSFs744UmrG Uz0LqY
S3R3cQmKWgnVWonjV/X9vJ aLB3VbubIDd0VW9I5
=HGmP
-----END PGP MESSAGE-----
修復語法(<? php非常錯誤)
$ cat gpg.php
<?php
putenv("GNUPGHOME=/home/jaroslav/.gnupg");
$gpg=new gnupg();
$gpg->addencryptkey("C1CFDC84CA8A42DBF03371E75B9ED4CB2025188B"); //fingerprint
if ($enc = $gpg->encrypt("hi")) {
echo $enc;
} else {
echo $gpg->geterror() . PHP_EOL ;
}
如果您實際上是在瀏覽器/服務器中運行它,請確保運行 Web 服務器的用戶可以讀取 .gnupg 檔案夾和其中的檔案。
好的。對于我的用戶:
$ namei -l /home/jaroslav/.gnupg/trustdb.gpg
f: /home/jaroslav/.gnupg/trustdb.gpg
drwxr-xr-x root root /
drwxr-xr-x root root home
drwxr-xr-x jaroslav jaroslav jaroslav
drwx------ jaroslav jaroslav .gnupg
-rw------- jaroslav jaroslav trustdb.gpg
apache 用戶沒有 bueno(你可能會有一個 www-data 用戶)
$ sudo -u apache namei -l /home/jaroslav/.gnupg/trustdb.gpg
f: /home/jaroslav/.gnupg/trustdb.gpg
drwxr-xr-x root root /
drwxr-xr-x root root home
drwxr-xr-x jaroslav jaroslav jaroslav
drwx------ jaroslav jaroslav .gnupg
trustdb.gpg - Permission denied
如果我以 apache 用戶身份運行 php 腳本,我會收到與您相同的錯誤:
$ sudo -u apache php gpg.php
no key for encryption set
您可以通過允許 www-data 用戶(或運行 Web 服務器或 php-fpm 行程的實際用戶)訪問 .gnupg 檔案夾來解決此問題。
setfacl -R -m u:www-data:rwx /home/admin/.gnupg
setfacl -R -m u:apache:rwx /home/admin/.gnupg
您不需要這兩個命令,只需要一個。
This command will allow the www-data user to read everything in the .gnupg folder. This is dangerous and someone could steal your private key.
If I were you I would instead create a .gnupg directory for the www-data user instead of using the one belonging to the admin, but that's up to you. Be careful in your production environment especially if you plan on doing something non-trivial or something involving money.
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/329318.html
上一篇:腳本卡在LXC初始化任務中
